javascript - 为什么ES6中的map函数不刷新?

标签 javascript arrays reactjs ecmascript-6

我想创建一个待办事项列表,它以 allTask​​s 状态存储任务,并在我手动推送一些数据时工作,但当我添加带有输入的项目时不会在 map 功能中显示。

class App extends Component {
    constructor(props) {
        super(props);
        this.state = {
            inputValue: '',
            allTasks: []
        }

    this.addToList = this.addToList.bind(this);
    }

    addToList() {
        this.state.allTasks.push(this.state.inputValue);
    }

    render() {
        return (
          <div>
              <h1>کار های خود را مدیریت کنید !</h1>
              <input type="text" placeholder="کار خود را بنویسید ..." onChange={ event => this.setState({ inputValue: event.target.value }) } />
              <button onClick={ this.addToList }>ثبت کردن</button>
              <hr />
              <ul>
              {
                  this.state.allTasks.map(task => {
                      return <li>{ task }</li>;
                  })
              }
              </ul>
          </div>
        );
    }
}

最佳答案

您正在改变原始状态。不要改变状态,并使用 setState 重新呈现 ui。

addToList() {
   let k = [...this.state.allTasks];
   k.push(this.state.inputValue);
   this.setState({allTasks: k})
}

or
addToList() {
   this.setState({allTasks: [...this.state.allTasks, this.state.inputValue]})
}

直接更改状态不会重新呈现 ui。您应该避免直接改变状态。另外,使用 setState 更新状态将重新渲染 ui。

let k = [...this.state.allTask​​s]; 创建一个新数组,然后我们将一个值推送到 k。所以在这种情况下我们不会直接改变状态。相反,我们正在更改新创建的数组。之后,我们使用 setState 来设置将更新 ui 的 state

关于javascript - 为什么ES6中的map函数不刷新?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48994394/

相关文章:

Javascript的按位运算符优化?

javascript - 单击同一个选中的单选按钮后,如何清除单选按钮组中选中的单选按钮

C++ linux 套接字在单个调用中将字符串数组(char **)作为连接字符串发送

javascript - React 调度未定义删除操作

reactjs - 避免双重使用效果中的陈旧状态?

javascript - 在 Ajax 调用之前验证输入

javascript - 系列对象中意外的重复输出

java - 从全局变量中读取和写入

javascript - 在纯函数式 JavaScript : Iterate over a string's characters, 中,如果满足条件则返回一个值

javascript - React,如何从同一组件访问我的渲染函数中的 DOM 元素