代码之家  ›  专栏  ›  技术社区  ›  yaya

React道具是只读的,所以它们如何更改?

  •  0
  • yaya  · 技术社区  · 5 年前

    我在学反应我知道react中的道具是只读的。

    但我在某个地方读到:

    getDerivedStateFromProps根据属性更改更新状态

    所以我很困惑如果道具是只读的,它们如何更改?

    0 回复  |  直到 5 年前
        1
  •  1
  •   felixmosh    5 年前

    它们在组件的上下文中是只读的,这意味着您不能为它们分配新值。

    但是,一个将道具传递给孩子的家长,可以根据某些条件传递不同的道具在这种情况下,孩子会得到不同的道具渲染。

    例子:

    
    class Parent extends React.Component {
      constructor(props) {
        super(props);
        this.state = {
          value: 0,
        };
      }
      render() {
        return (
          <div>
            <Child prop1={this.state.value} />
            <button onClick={() => this.setState({ value: this.state.value + 1 })}>Click me</button>
          </div>
        );
      }
    }
    

    在我的示例中,每次单击父组件的按钮都将更改其状态,因此,React将重新呈现它,然后此父组件将向子组件传递一个新值。

        2
  •  0
  •   Rahul Tibrewal    5 年前

    我认为您需要了解组件的生命周期以及如何使用和处理道具,这些道具在下面的链接中描述得很好:

    https://reactjs.org/docs/react-component.html#static-getderivedstatefromprops https://reactjs.org/docs/components-and-props.html#props-are-read-only

    道具是只读的,这意味着您不能更改值,但并不意味着您不能更新它,因为您需要将更新的道具传递回子组件,并将任何生命周期方法传递给它。

        3
  •  0
  •   Ashish Kamble    5 年前

    道具或状态的更改可能会导致更新。 当有更新时 render() 方法被调用。
    你说的是道具更新,这直接意味着你正在改变和修改孩子,
    道具更改意味着从父级传递的数据更改,从而导致道具更改,
    永远记住从父级传递的状态被认为是子级的道具是关键点。
    static getDerivedStateFromProps(props, state) 在之后被调用 渲染() 很少邮寄用于动画转换。 可能的事情 componentWillRecieveProps() componentDidUpdate() 现在由 getDerivedStateFromProps() ,它将返回对象以响应道具的更改,如果没有更改,则返回空值,听起来很棒。
    如你所见,方法是 static 你不能改变任何数据,你可以玩你的 nextProps prevState 只有。
    这对于具有异步api调用的组件很有用。