当前位置: 首页 > 知识库问答 >
问题:

React组件必须就其道具而言表现得像纯函数吗?

松英叡
2023-03-14

我正在阅读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之外。

共有2个答案

齐琦
2023-03-14

提取成分可按如下方式制成纯品

const Withdraw = ({account, amount}) =>  
   <div>Balance: {account.balance - amount} </div>;

简单对吧?这就是纯组件的作用

  • 大约20%的代码可以减少

由于无状态功能组件不支持本地状态,因此您必须将状态管理放在更高级别的容器组件中或通过Flux/Redux进行。

这就是无状态函数组件如何以编程方式强制保持组件纯净

薛弘壮
2023-03-14

就像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]。道具看起来像 我希望属性如下所示。上面只是打印出语句函数。 这是一个奇怪的问题,但说来话长,我正在使用一个库,这就是它的结论。