ReactJS-添加/修改无状态功能组件的propTypes的多种方法
ReactJS - Multiple ways to add/modify propTypes of a stateless functional component?
问题
下面的方法2是如何工作的?
高级
我最近遇到了两种定义无状态功能ReactJS组件的不同方法(两者都很好):
-
方法1:
const Greet1 = function () {...}
Greet1.propTypes = {...}
export default Greet1
-
方法2:
Greet2.propTypes = {...}
export default function Greet2 () {...}
方法1对我来说很有意义:我们从定义Greet1
开始,然后添加/修改其属性。
方法2是我不明白的。在定义Greet2
本身之前,我们怎么可能被允许在Greet2
中添加/修改属性?
(或者它更像是JavaScript的基础知识,而不是ReactJS特有的?)
详细示例
假设我有一个ReactJS GreetContainer
,它封装了单独的表示组件Greet1
和Greet2
。
GreetContainer
这是GreetContainer.js
-一个(可以是有状态的)容器组件,用于包装Presentation Components:
import React, { PropTypes } from 'react'
import { Greet1, Greet2 } from 'components'
const GreetContainer = React.createClass({
render () {
return (
<div>
<Greet1 message="This is Greet1"/>
<Greet2 message="This is Greet2"/>
</div>
)
},
})
export default GreetContainer
贪婪1
这是Greet1.js
-一个(无状态)呈现组件(我理解):
import React, { PropTypes } from 'react'
const Greet1 = function ({message}) {
return (
<div>
<p>{message}</p>
</div>
)
}
Greet1.propTypes = {
message: PropTypes.string.isRequired
}
export default Greet1
贪婪2
这就是Greet2.js
——一个(无状态)呈现组件(我不太理解——在定义Greet2
本身之前指定Greet2
的属性对我来说没有意义?):
import React, { PropTypes } from 'react'
Greet2.propTypes = {
message: PropTypes.string.isRequired
}
export default function Greet2 ({message}) {
return (
<div>
<p>{message}</p>
</div>
)
}
更新-关于JavaScript吊装
下面提供的答案表明方法2是有效的,因为JavaScript默认使用提升(将声明提升到代码顶部)。
尽管有这种默认行为,W3SchoolsJavaScript-Hlifting表示,在使用变量之前声明变量是一种很好的做法。所以我创建了Greet3
(经过测试和工作)——我想这可能是一个比Greet1
和Greet2
更好的模式。
import React, { PropTypes } from 'react'
function Greet3 ({message}) {
return (
<div>
<p>{message}</p>
</div>
)
}
Greet3.propTypes = {
message: PropTypes.string.isRequired
}
export default Greet3
在javascript中,函数声明被提升到顶部。所以实际上javascript处理的是:
Greet2.propTypes = {...}
export default function Greet2 () {...}
像这样:
function Greet2 () {...}
Greet2.propTypes = {...}
export default Greet2;
相关文章:
- electronic BrowserWindow的最小高度和宽度在hide()show()方法之后不起作用
- 有没有任何方法可以将控制器从文件加载到ui路由器$stateProvider中
- 数组在递归方法中设置为null
- 打破承诺链的好方法是什么
- 在使用Polymer'加载所有json文件后执行方法;s的核心ajax
- 使用“;这个“;JavaScript原型方法中的关键字
- 序列化数据属性中对象的最可靠方法
- 使用Objective-C的JavaScript注入方法
- 有没有一种方法可以添加相同的项目val=“0”;4〃;到JavaScript中数组的每个对象
- 有没有一种方法可以防止img get请求使用css或js发生
- Javascript,有没有一种方法可以将数组写成没有逗号或空格的单个文本字符串
- toBoolean方法类似于toString
- 如何在单击复选框后调用控制器方法
- 是否有任何方法可以使用jQuery替换在数组中定义值的文本
- 递归使用 eval() 是检查程序执行的好方法吗?
- 如何在webView,Android中从@JavascriptInterface方法调用Javascript
- toLocaleDateString和toLocaleString方法不尊重机器时区
- 有条件更新d3.js力图中节点的最佳方法
- TypeError:在不兼容的接收器nodejs上调用了方法Uint8Array.length
- ReactJS-添加/修改无状态功能组件的propTypes的多种方法