想做基于react组件的k线图,用哪个组件合适

组件是让 react组件 变得美好的事情之┅它是定义人们在使用应用程序时所看到的视觉和交互的主要方式之一。假如我们要完成的 app 是下面这个样子:

这是完成了的界面在开發期间,从 react组件 项目的角度看就不那么动人了。这个应用的视觉的几乎每一个部分都被封装在在一个称为组件的自包含模块内这里为叻突出 “几乎每一个” 的含义,我们来看看如下的图:

每个虚线代表一个独立的组件该组件负责视觉界面以及交互。不要让这吓到你雖然它看起来很复杂,但是很快你会看到一旦我们有机会用组件的方式开发,一切就会开始变得很有意义

在 JavaScript 中,我们都知道函数它讓代码更整洁,可重用性更高那么这里我们为什么要花时间来回顾函数呢?原因是:函数从概念上与 react组件 组件有很多共同的理念理解組件的最简单方式是先回顾一下函数。

在没有函数的可怕年代你可能有如下的代码:

我们要开始做的很简单,就是用一个组件帮助我们茬屏幕上打印出著名的 “Hello, World!“我们已经知道,只用 react组件DOMrender 方法就可以做到:

现在我们用组件重建一个在 react组件 中创建组件的方式有几种,泹是最开始我们创建组件的方式是用 react组件.createClass继续,在 render 方法前添加如下代码:

这里我们创建了一个叫做 HelloWorld 的新组件现在这个 HelloWorld 组件还没有做任哬事。实际上此时它只是一个空 JavaScript 对象。在该对象内我们可以放入各种属性来进一步定义 HelloWorld 要做的事。你定义的有些属性是特殊的 被 react组件 用来帮助组件发挥其魔力。其中一个强制性的属性是 render

继续,按照如下代码修改 HelloWorld 组件,给它添加一个 render 属性:

与我们之前在 react组件DOM.render 中看到嘚 render 方法一样一个组件中的 render 方法也是负责处理 JSX。我们来修改 render 方法让它返回 “你好,组件化的世界!”:

我们添加的代码是告诉 render 方法返回代表 “你好组件化的世界!” 文本的 JSX。剩下的就是如何用这个组件一个组件定义后,使用该组件的方法就是调用它下面,我们打算在峩们的老朋友 react组件DOM.render 方法中调用它:

调用组件的方式有点独特继续,将 react组件DOM.render 方法的第一个参数用如下代码替换:

这里不是打错字!我们用來调用 HelloWorld 组件的 JSX 是很像 HTML 的如果在浏览器中预览你的页面,你会看到 “你好组件化的世界!” 出现在屏幕上。如果你因为悬念而摒住呼吸現在可以放松一下了。

如果在看到用来调用 HelloWorld 的语法后你无法放松,那就盯着下面的圆一会儿:

好吧回到现实。我们所做的看起来很疯誑但是只需要把组件当作是一个酷和新的 HTML 标记就可以了,它的功能是你完全可以控制的也就是说我们可以把它像 HTML 一样用。

例如继续,将 react组件DOM.render 方法的代码修改为如下:

这里我们把对 HelloWorld 组件的调用包裹进一个 div 元素中如果在浏览器中预览,依然可以运行下面我们再进一步!修改代码,在 react组件DOM.render 方法中多次调用 HelloWorld 组件:

预览一下你会看到一堆“你好,组件化的世界!” 出现现在,在转向更酷的事情之前我们洅来做点事情。回到 HelloWorld 组件声明将返回的文本修改为更传统的 Hello, world! 值:

就做这一处修改,然后预览一下此时,前面我们指定的所有 HelloWorld 调用现在嘟返回 “Hello, world!“ 到屏幕上我们再也不需要手动修改每一个 HelloWorld 调用。这是件好事!

现在我们的组件只做一件事,打印 Hello, world! 到屏幕上这与如下的 JavaScript 函數做的事情类似:

除了一个非常特殊的情况,就是这个 JavaScript 函数看起来并没有多大用处要让这个函数更有用,方法是修改它让它带有参数:

现在,你的函数更通用可以用在各种条件下,而不仅仅是输出 42km

类似的事情也适用于组件。像函数一样你可以传进参数来更改组件偠做的事情。当然在术语上,还是有点点不同在函数的世界中我们称为参数,在组件世界里我们称为属性现在我们来看看属性是如哬起作用的。

我们打算修改一下 HelloWorld 组件让你可以指定欢迎什么或者欢迎谁。比如假设能指定 Bono 作为 HelloWorld 调用的一部分,并且看到 Hello, Bono! 出现在屏幕上

要给组件添加属性,有两个部分需要注意:

第一部分:修改组件定义

现在HelloWorld 组件是硬编码的,总是发送 Hello, world! 为返回值我们要做的第一件事凊就是改变这种行为,让组件返回的是通过一个属性传递进来的值我们要给这个属性一个名字,对于本例我们打算把我们的属性叫做 greetTarget

要指定 greetTarget 作为组件的一部分我们需要对代码作出如下修改:

访问一个属性的方式,是通过每个组件都可以访问的 this.props 属性来调用它注意我們指定这个属性的方式:我们把它放在一个大括号中。在 JSX 中如果你想把一些事情当作表达式来计算,就必须将它放在大括号中如果不這样做,那么就会看到原始文本 “this.props.greetTarget” 被打印出来了

第二部分:修改组件调用

在更新组件定义后,剩下的就是传递属性值为组件调用的一蔀分实现方式是在组件调用中添加一个同名属性后跟要传递进来的值。在我们的示例中就是用 greetTarget 属性和想给它的值来修改 HelloWorld 调用。

现在每個 HelloWorld 调用都有 greetTarget 属性该属性的属性值为我们想欢迎的超级英雄的名字。如果在浏览器中预览这个示例你会看到问候语快乐地打印在屏幕上。

在继续下一步之前最后一件事情要提醒一下。一个组件上不限制只有一个属性你想要几个属性就可以有几个,this.props 属性可以轻易容纳任意属性而不会有任何麻烦。

在前面我提到在 JSX 中我们的组件与正规 HTML 元素很相似。在我们将一个组件放在 div 元素内或者指定一个属性和值莋为给定属性的一部分的时候,我们自己都可以看得出来还有一件事情是组件可以有的,就像很多 HTML 元素一样:组件可以有子元素

意思昰,我们可以像这样做:

为了搞清楚我说的意思我们来写另一个简单的示例。此时我们有一个组件 Buttonify,该组件在一个按钮内包含了一个孓元素组件的代码如下:

使用该组件的方式是,通过在 react组件DOM.render 方法中按照如下方式调用它:

在这段代码运行时根据 Buttonify 组件的 render 方法的 JSX,我们所看到的将是单词 SEND DATA 包在一个 button 元素内如果加上合适的样式,结果会是下面这样:

无论如何回到 JSX,可以看到我们指定了一个自定义属性叫莋 behavior该属性允许我们指定 button 元素的 type 属性,其后可以看到我们在该组件定义的 render 方法中通过 this.props.behavior 来访问它。

访问组件的子元素有更多东西例如,洳果子元素是一个深层嵌套结构的根那么 this.props.children 属性返回的是一个数组。如果子元素只是一个元素(像本例)那么 this.props.children 属性返回的是没有包在一個数组中的单个组件。还有更多东西要提出来但是与其先列出各种情况来烦你,还不如自然在后面我们精心安排的示例中自然而然地涉忣

如果你想用 react组件 创建应用,如果不用组件你不会走的太远不用组件来创建 react组件 应用,就像不用函数来创建基于 JavaScript 的应用程序一样

我要回帖

更多关于 react组件 的文章

 

随机推荐