Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在react中更新状态,以便使用array.map函数更新数组中对象的值_Javascript_Reactjs_Data Structures_State - Fatal编程技术网

Javascript 如何在react中更新状态,以便使用array.map函数更新数组中对象的值

Javascript 如何在react中更新状态,以便使用array.map函数更新数组中对象的值,javascript,reactjs,data-structures,state,Javascript,Reactjs,Data Structures,State,函数handleFeetAndInch使用index更新状态,同时使用array.map并传递更新状态的函数,但所有调用的函数都会引用映射的状态,因此其他映射索引不会获取更新的状态值,根据测量对象具有以下属性的情况,是否有这种或其他方法转换值的实践: 状态={measurements:[{name:'',value:'',algo:''}…] 您没有正确使用映射函数。返回一个新数组,原始数组的值映射到新值 UpdatehandleFeeAndInch只是作为映射回调,将新值返回到新数组中,然后设

函数handleFeetAndInch使用index更新状态,同时使用array.map并传递更新状态的函数,但所有调用的函数都会引用映射的状态,因此其他映射索引不会获取更新的状态值,根据测量对象具有以下属性的情况,是否有这种或其他方法转换值的实践: 状态={measurements:[{name:'',value:'',algo:''}…]


您没有正确使用映射函数。返回一个新数组,原始数组的值映射到新值

Update
handleFeeAndInch
只是作为映射回调,将新值返回到新数组中,然后设置该数组的状态

handleFeetandInch = (key, nameValue, value) => {
  let realFeet = (value * 0.3937) / 12;
  let feet = Math.floor(realFeet);
  let inches = Math.round((realFeet - feet) * 12);
  let updatedValue = `${feet}'${inches}"`;
  const newMeasurement = [...this.state.measurements];
  newMeasurement[key] = {
    name: nameValue,
    value: updatedValue
  };
  this.setState({
    measurements: newMeasurement
  });
};

handleUnitChange = () => {
  if (this.state.isCm) {
    // reset State
  } else {
    this.state.measurements.map((measurement, key) =>
      measurement.algo === 1
        ? this.handleFeetandInch(key, measurement.name, measurement.value)
        : this.handleInches(key, measurement.name, measurement.value)
    );
    this.setState(prevState => ({
      isCm: !prevState.isCm
    }));
  }
};
handleFeetandInch = (key, nameValue, value) => {
  let realFeet = (value * 0.3937) / 12;
  let feet = Math.floor(realFeet);
  let inches = Math.round((realFeet - feet) * 12);
  let updatedValue = `${feet}'${inches}"`;

  // return new measurement value
  return {
    name: nameValue,
    value: updatedValue
  };
};

handleUnitChange = () => {
  if (this.state.isCm) {
    // reset State
  } else {
    // get array of new measurements
    const newMeasurements = this.state.measurements.map((measurement, key) =>
      measurement.algo === 1
        ? this.handleFeetandInch(key, measurement.name, measurement.value)
        : this.handleInches(key, measurement.name, measurement.value)
    );
    this.setState(prevState => ({
      measurements: newMeasurements
    }));
    this.setState(prevState => ({
      isCm: !prevState.isCm
    }));
  }
};