0

在我的数据库中,我有打开时间表,我在一周中的每一天都有班次,当我尝试修改一天的开放时间时,其他一天的开放时间它们被删除


这是我更新状态数据的代码

 async handleChange(e) {
    const target = e.target;
    const name = target.name;
    const value = target.value;


   await this.setState({
      opening_time: {
        ...this.state.opening_time,

        [this.state.day]: [['1', name == '0' ? value : this.state.opening_time[this.state.day][0][1], name == '1' ? value : this.state.opening_time[this.state.day][0][2]],(name == '2' || name == '3')? ['1', name == '2' ? value : this.state.opening_time[this.state.day][1][1], name == '3' ? value : this.state.opening_time[this.state.day][1][2]]:['0']]


      }
    });

    this.props.setData({ opening_time: JSON.stringify(this.state.opening_time) })



  }
  setData(data) {
    this.setState({ data: { ...this.state.data, ...data } })

  async send() {
    console.log(this.state.data)
    await callApi('post/' + this.state.id, this.state.data, 'PUT') .then(res=>{console.log(res,"yrt")
    }).catch(error=>{ this.setState({visible: "echec"})})



  }

这是我的开放时间格式

{"Mon":[["1", "08:00", "12:15"],["1", "14:14", "23:23"]],"Tue":[["0"],["0"]],"Wed":[["0"],["0"]],"Thu":[["0"],["0"]],"Fri":[["0"],["0"]],"Sat":[["0"],["0"]],"Sun":[["0"],["0"]]}

有人可以帮帮我吗!谢谢

4

1 回答 1

0

使用之前的状态来更新状态,而不是直接在状态中使用 this.state。请参阅 React 文档状态更新可能是异步的

在您的代码中,您可以像下面这样重写代码

this.setState(prevState => ({
      opening_time: {
        ...prevState.opening_time,

        [prevState.day]: [['1', name == '0' ? value : prevState.opening_time[prevState.day][0][1], name == '1' ? value : prevState.opening_time[prevState.day][0][2]],(name == '2' || name == '3')? ['1', name == '2' ? value : prevState.opening_time[prevState.day][1][1], name == '3' ? value : prevState.opening_time[prevState.day][1][2]]:['0']]


      }
    }));
 setData(data) {
    this.setState(prevState => ({ data: { ...prevState.data, ...data } })_
于 2020-02-05T08:51:47.900 回答