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

ReactJS状态vs道具

茅鸿宝
2023-03-14
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的方法,使我们的文本模型属性状态,并在保存之前将其编译回模型,如下所示:

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(),但是随着模型的增长,(post可能有作者、主题、标记、注释、评分等)组件开始变得非常复杂。

第一种方法是ReactLink吗?

共有1个答案

余阳秋
2023-03-14

更新2016:React被改变,“道具对状态”的解释变得非常简单。如果组件需要更改数据--将其置于状态,否则置于道具中。因为道具现在是只读的。

道具和状态的确切区别是什么?

你可以在这里找到很好的解释(完整版)

 类似资料:
  • 我实际上正在学习reactjs,并且实际上正在开发一个小的TODO列表,包装在一个名为TODO的“父组件”中。 我决定将初始化移到componentDidMount内部,但这似乎是一个反模式,我需要另一个解决方案。你能帮我吗? 下面是我的实际代码:

  • 我试图了解如何构建具有不同"页面"或"视图"的ReactJS应用程序。 我将以下组件作为我的基础应用程序,并且我正在React状态中使用currentState属性在视图中的活动组件之间切换。 它执行此任务,但在启动dataLoaded回调时,组件从不接收更新的recipes数组。 如何根据应用程序中的更新状态更新道具? 还是我处理这整件事的方式错了?

  • 我是新来的反应。我被困在这件事上,真的很感激你的帮助! 父组件将把一个数组传递到这个子组件中。当我console.log(this.props.repairs)时,它显示了一个4的数组。每当传入修复数组时,我都试图更新this.state.SortedDataList。console.log(this.state)仍然将sortedDataList显示为空数组。 我做错了什么?非常感谢,谢谢你的帮

  • 以下是: code>button.jsx的来源并不重要,它有一个常规的HTML单选按钮,触发本机DOM事件 预期流量为: null 尝试:在的onChange处理程序中: 问题: 尝试:在的onChange处理程序中:

  • 问题内容: constructor(){ super(); this.state = { address: { street:null, city:null, postalCode: null } }; } postalCodeChange(e){ this.setState.address.postalCode = e.target.value; console.log(this.state);

  • 我正在处理这个FreeCodeCamp排行榜表,当单击突出显示的表头时,应用程序调用这个url https://fcctop100.herokuapp.com/api/fccusers/top/recent,或者这个https://fcctop100.herokuapp.com/api/fccusers/top/alltime,从而在过去30天或所有时间中得分最高的露营者之间进行排序。 我在这里的