Setstate 未在 CustomInput type='checkbox' 处理程序中更新

Setstate not updating in CustomInput type='checkbox' handler

这是渲染方法,我是如何调用处理程序和设置 reactstrap 复选框的。

    this.state.dishes.map(
                    (dish, i) => (
                      <div key={i}>
                          <CustomInput
                            type="checkbox"
                            id={i}
                            label={<strong>Dish Ready</strong>}
                            value={dish.ready}
                            checked={dish.ready}
                            onClick={e => this.onDishReady(i, e)}
                          />

                        </div>))

onClick 侦听器的处理程序,我也尝试过使用 onchange,但它似乎没有做任何事情,idk 为什么?

  onDishReady = (id, e) => {
    console.log(e.target.value)
    var tempArray = this.state.dishes.map((dish, i) => {
      if (i === id) {


        var temp = dish;
        temp.ready = !e.target.value
        return temp
      }
      else {
        return dish
      }
    })
    console.log(tempArray)
    this.setState({
      dishes: tempArray

    });

  }

你可以这样做:

    this.setState(function (state) {
        const dishes = [...state.dishes];
        dishes[id].ready = !e.target.value;
        return dishes;
    });

event.target.value 不是输入复选框的 "toggled" 值,event.target.checked 是。

onDishReady = index => e => {
  const { checked } = e.target;
  this.setState(prevState => {
    const newDishes = [...prevState.dishes]; // spread in previous state
    newDishes[index].ready = checked; // update index
    return { dishes: newDishes };
  });
};

呈现的 CustomInput 减少为

<CustomInput
  checked={dish.ready}
  id={i}
  label={<strong>DishReady</strong>}
  onChange={this.onDishReady(i)}
  type="checkbox"
/>

无需传入 value 道具,因为它永远不会改变。

注意: 虽然 onClick 处理程序确实有效,但从语义上讲它不是正确的事件,您希望逻辑响应检查的值复选框更改与用户单击其元素的比例。