当前位置:  开发笔记 > 编程语言 > 正文

状态和道具是否可变?

如何解决《状态和道具是否可变?》经验,为你挑选了2个好方法。

假设我有一个react组件 - 一个按钮 - 当我点击它时会增加一个值.

例如

var Component = React.createClass({
    getInitialState: function() {
        return {count: 0}
    },

    increment: function() {
        this.setState({count: this.state.count + 1})
    },

    render: function() {
        return ();
    }
})

React.render(, document.getElementById('react-container'));

国家是可变的!

我可以用道具做类似的事情

var Component = React.createClass({
    increment: function() {
        this.setProps({count: this.props.count + 1})
    },

    render: function() {
        return ();
    }
})

React.render(, document.getElementById('react-container'));

国家是可变的!

我检查过的一些资源说道具是不可改变的,但是然后去做类似的事情setProps.不同的资源互相矛盾.这使我很难掌握状态和道具之间的区别.

道具是否可变?如果没有,为什么我可以改变它们?似乎改变道具不是好习惯,这是真的吗?如果是,为什么setProps存在?



1> Tom Fenech..:

this.props并且this.state 可以被改变,但这实际上只是JS中对象可变性的结果.

this.setState改变当前状态的断言是错误的; 创建表示状态的新对象,并应用更改.

说实话,我甚至不知道它setProps存在,但它听起来像一个完整的反模式!道具的重点在于它们被传递给组件,强制执行单向数据流.如果组件可以更改自己的道具,则此流程会中断.

您应该真正的目标是尽可能多地将应用程序状态存储在顶层,即在商店中,而不是使用组件状态.如果所有的州都在一个地方,那么理由就更容易了.



2> Joe Clay..:

setProps是React早期的遗留物,现在已经不推荐使用了很长时间了。没错,从组件内部更改prop不是一个好习惯-将其视为函数的参数。而不是变异道具,您应该:

使用回调道具来通知父母发生了某些事情-父母可以随后更改其拥有的数据,并通过道具将其传递回孩子。

像在第一个示例中一样使用组件状态。

这两种解决方案的共同点在于,一个组件拥有数据,而这是唯一允许修改数据的组件-通常被称为“单一真相”。以这种方式构造代码的好处在于,这意味着您不会陷入意粉代码缠结的麻烦之中,因为它们无法使谁在修改数据片段。

推荐阅读
放ch养奶牛
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有