为什么我在 React 状态下只能更改一个对象 属性?

Why can I only change one object property in my React state?

我正在尝试在 React 中创建一个利息计算器。我可以使用滑块更改一个 属性 的值,但是一旦我更改第二个 属性 值,第一个 属性 就会重置为默认值。

这是为什么以及如何解决?

const CalculatorContext = React.createContext();
const CalculatorProvider = (props) => {

  const calculatorInformation = {
    initial_investment: 10000,
    monthly_contribution: 1000,
    length_of_time_years: 40,
    interest_rate_per_year: 7,

    result: 2636200,
    changeCalculation: (value, property) => {
      setCalcInfo(
        {...calcInfo, [property]: value}
      );
    }
  }
  const [calcInfo, setCalcInfo] = useState(calculatorInformation);

  return (
    <CalculatorContext.Provider value={calcInfo}>
      {props.children}
    </CalculatorContext.Provider>
  )
}
<input type="range" min="0" max="100000" step="1000" value={context.initial_investment}
        onChange={(e) => context.changeCalculation(parseInt(e.target.value), "initial_investment")}></input>

这里的问题是你如何使用 useState 钩子,在一个状态中声明一个函数是反模式的。只需将函数移到状态块之外,一切都会正常工作。

const CalculatorContext = React.createContext();
const CalculatorProvider = (props) => {

  const calculatorInformation = {
    initial_investment: 10000,
    monthly_contribution: 1000,
    length_of_time_years: 40,
    interest_rate_per_year: 7,

    result: 2636200,
    
  }
  const [calcInfo, setCalcInfo] = useState(calculatorInformation);
  
  const changeCalculation = (value, property) => {
      setCalcInfo(
        {...calcInfo, [property]: value}
      );
    }
    
  return (
    <CalculatorContext.Provider value={{calcInfo, changeCalculation}}>
      {props.children}
    </CalculatorContext.Provider>
  )
}