IT虾米网

ReactJS 状态与 prop

pengyingh 2025年05月04日 程序员 504 0

这可能是在负责任和固执己见之间的界限,但随着复杂性的增加,我会来回讨论如何构建 ReactJS 组件,并且可以使用一些方向。

来自 AngularJS,我想将我的模型作为属性传递到组件中,并让组件直接修改模型。或者我应该将模型拆分为各种 state 属性,并在发送回上游时将其重新编译在一起? ReactJS的方式是什么?

以博客文章编辑器为例。尝试直接修改模型最终看起来像这样:

var PostEditor = React.createClass({ 
  updateText: function(e) { 
    var text = e.target.value; 
    this.props.post.text = text; 
    this.forceUpdate(); 
  }, 
  render: function() { 
    return ( 
      <input value={this.props.post.text} onChange={this.updateText}/> 
      <button onClick={this.props.post.save}/>Save</button> 
    ); 
  } 
}); 

这似乎是错误的。

这是否更像是 React 方式来使我们的 text 模型属性 state 并在保存之前将其编译回模型,如下所示:

var PostEditor = React.createClass({ 
  getInitialState: function() { 
    return { 
      text: "" 
    }; 
  }, 
  componentWillMount: function() { 
    this.setState({ 
      text: this.props.post.text 
    }); 
  }, 
  updateText: function(e) { 
    this.setState({ 
      text: e.target.value 
    }); 
  }, 
  savePost: function() { 
    this.props.post.text = this.state.text; 
    this.props.post.save(); 
  }, 
  render: function() { 
    return ( 
      <input value={this.state.text} onChange={this.updateText}/> 
      <button onClick={this.savePost}/>Save</button> 
    ); 
  } 
}); 

这不需要调用 this.forceUpdate(),但随着模型的增长,(帖子可能有作者、主题、标签、评论、评级等...... )组件开始变得非常复杂。

第一个方法是 ReactLink该怎么走?

请您参考如下方法:

2016 年更新: React 发生了变化,“props vs state”的解释变得非常简单。如果组件需要更改数据 - 将其放入状态中,否则放入 Prop 中。因为 Prop 现在是只读的

props 和 state 之间的确切区别是什么?

你可以找到很好的解释here (完整版)


评论关闭
IT虾米网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!