在子组件的父组件上执行setState时,推荐的模式是什么.

var Todos = React.createClass({
  getInitialState: function() {
    return {
      todos: [
        "I am done",
        "I am not done"
      ]
    }
  },

  render: function() {
    var todos = this.state.todos.map(function(todo) {
      return <div>{todo}</div>;
    });

    return <div>
      <h3>Todo(s)</h3>
      {todos}
      <TodoForm />
    </div>;
  }
});

var TodoForm = React.createClass({
  getInitialState: function() {
    return {
      todoInput: ""
    }
  },

  handleOnChange: function(e) {
    e.preventDefault();
    this.setState({todoInput: e.target.value});
  },

  handleClick: function(e) {
    e.preventDefault();
    //add the new todo item
  },

  render: function() {
    return <div>
      <br />
      <input type="text" value={this.state.todoInput} onChange={this.handleOnChange} />
      <button onClick={this.handleClick}>Add Todo</button>
    </div>;
  }
});

React.render(<Todos />, document.body)

我有一个待办事项数组,它是在父级状态下维护的.

推荐答案

在父组件中,您可以创建一个类似于addTodoItem的函数,该函数将执行所需的setState,然后将该函数作为props 传递给子组件.

var Todos = React.createClass({

  ...

  addTodoItem: function(todoItem) {
    this.setState(({ todos }) => ({ todos: { ...todos, todoItem } }));
  },

  render: function() {

    ...

    return <div>
      <h3>Todo(s)</h3>
      {todos}
      <TodoForm addTodoItem={this.addTodoItem} />
    </div>
  }
});

var TodoForm = React.createClass({
  handleClick: function(e) {
    e.preventDefault();
    this.props.addTodoItem(this.state.todoInput);
    this.setState({todoInput: ""});
  },

  ...

});

可以在TodoForm的handleClick中调用addTodoItem.这将在父级上执行设置状态,以呈现新添加的todo项.希望你能明白.

Fiddle here.

Reactjs相关问答推荐

useReducer和带有回调的useState之间是否有实际区别?

react应用程序中的字体不适用于.scss扩展名

eslint -无法解析模块的路径@web3modal/ethers/react导入/no-unresolved

UseEffect和useSelector的奇怪问题导致无限循环

使用Reaction-Hook-Form时未激发React.js onBlur事件

在url中使用MongoDB对象ID被认为是不好的做法?

如何使用useState响应快速/顺序状态更新

使用Next.js和Next-intl重写区域设置

Javascript - 正则表达式不适用于 MAC OS - 编码?

将 useRef 与 useImperativeHandle 一起使用时,React 不会重新渲染

redux 工具包使用中间件构建器函数时,必须返回一个中间件数组

图像路径很奇怪,部署 Next.js 应用程序后我看不到任何图像

如何使用 redux 和 react-plotly.js

如何使用样式化函数为 TextField 的输入组件设置样式

为什么刷新页面时我的localStorage PET值变成空字符串?

将props 传递给 NextJS 布局组件

如何检索包含动态段的未解析路径?

为什么此代码中的 useState 不更新(文本更新但 id 不更新)?

如何从一组对象映射 MUI 5 图标并更改其 colored颜色 ?

React如何在用户登录后等待当前用户数据被获取