this.state在.map内是0

时间:2018-06-02 13:03:48

标签: javascript reactjs

我尝试将所有选定的项目ID从redux商店转换为项目名称并将其保存到状态。

我的问题是setState函数内的spread运算符等于零。我是否必须将函数的上下文绑定到类?

  constructor(props) {
    super(props);
    this.state = {
      item_Name: []
    };
}




  componentDidMount() {
    this.props.Cart_Items.Id.map((item, i) => {
      if (item === "001") {
        // The problem is that this.state.item_Name is 0
        console.log(this.state.item_Name)
        this.setState({
          item_Name: [...this.state.item_Name, "Buddha"]
        });
      }
    })
  }

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

setState是异步的,会批量更新 另一件事,.map返回一个数组,所以只需将新数组存储在变量中并将其传递给setState

P.S,您正在检查.map内的条件。但.map应返回相同数量的成员,添加else或仅使用.filter.reduce

  componentDidMount() {
    const nextState = this.props.Cart_Items.Id.map((item, i) => {
      if (item === "001") {
        return "Buddha"
      }
      // you need an else here because map should return the same number of members, or use .filter or .reduce
    })
    this.setState({item_name: nextstate});
  }