我正在阅读React文档并阅读这一行(以粗体显示):
所有React组件在其道具方面必须表现得像纯函数。
这是避免意外行为的严格要求还是设计原则?
Facebook提供的“不纯”函数的示例是修改其输入的函数。但React组件似乎可以修改它作为输入接收的道具(我已经将下面的示例与它们自己的示例进行了镜像)。
代码笔:不纯净成分,与道具有关?
JSX代码:
var Withdraw = React.createClass({
render() {
this.props.account.balance -= this.props.amount;
return (
<div>Balance: ${this.props.account.balance} </div>
)
}
})
var CounterContainer = React.createClass({
render() {
var account = { balance: 10 }
return (
<div>
<Withdraw account={account} amount={2} />
<Withdraw account={account} amount={2} />
</div>
)
}
})
React.render(<CounterContainer />, document.getElementById('app'))
另外:我知道上面的内容可以写成无状态的函数组件,并且状态不应该存储在this.state
之外。
提取成分可按如下方式制成纯品
const Withdraw = ({account, amount}) =>
<div>Balance: {account.balance - amount} </div>;
简单对吧?这就是纯组件的作用
由于无状态功能组件不支持本地状态,因此您必须将状态管理放在更高级别的容器组件中或通过Flux/Redux进行。
这就是无状态函数组件如何以编程方式强制保持组件纯净
就像facebook说的,如果你需要改变的话。使用状态。
功能必须是纯粹的、有意义的
>
结果的评估不会导致任何语义上可观察到的副作用或输出,例如可变对象的突变或输出到I/O设备。
换句话说,这是一个纯函数
React非常灵活,但有一条严格的规则:
所有React组件在其道具方面必须表现得像纯函数。
当然,应用程序UI是动态的,并且会随时间变化。在下一节中,我们将引入一个新的“状态”概念。State允许React组件在不违反此规则的情况下,随着时间的推移更改其输出,以响应用户操作、网络响应和其他任何操作。
您的Facebook链接
这是一篇不错的文章
更多关于纯函数
本文向大家介绍React组件的构造函数是必须的吗?相关面试题,主要包含被问及React组件的构造函数是必须的吗?时的应答技巧和注意事项,需要的朋友参考一下 function组件不用考虑构造函数; 对于class组件,如果不写构造函数,默认会被隐式调用
什么是纯函数式语言?什么是纯函数式数据结构?我知道什么是函数式语言,但我不知道“纯”是什么意思。有人知道吗?有人能给我解释一下吗?谢谢!
问题内容: 我是React的新手,我想知道这里的标准是什么。 想象一下,我有一个像这样的反应路由器: 现在我想删除如果设置为的两条路线,因此一种理智的做法如下所示: 但是有两条路线,React返回错误: 表达式必须具有一个父元素。 我不想在这里使用多个ifs。React首选的处理方式是什么? 问题答案: 将它们放在一个数组中(也分配键): 使用最新的React版本,您也可以这样尝试 :
我有这个密码 这给了我一个错误 从这个问题 reactjs给出错误未捕获类型错误:超级表达式必须为空或函数,而不是未定义 它应该在React v0.13. x中消失,而我有0.13.3 发生什么事?
从0.13.2更新到0.14.2后,我发现以下错误: 对此已经有几个问题了。最常见的错误是拼错React.component(没有大写字母C)。另一个是尝试使用ES6类的版本 但我已经成功地使用了带有React 0.13.x的ES6类,我在所有地方都使用大写字母C,并且记录React.Component似乎给出了一个合适的结果(函数ReactComponent(…) 经过一些搜索,我做了这3个测试
在Tabs组件中,具有以下属性 儿童[0](this.props.children)将看起来像 孩子[0]。道具看起来像 我希望属性如下所示。上面只是打印出语句函数。 这是一个奇怪的问题,但说来话长,我正在使用一个库,这就是它的结论。