代码之家  ›  专栏  ›  技术社区  ›  sioesi

钩子值未更新

  •  1
  • sioesi  · 技术社区  · 5 年前

    我有以下几点:

    const [quantityKm, setQuantityX] = useState({ x: 0 });
    

    我有一个范围,当它改变时,执行以下函数

    const handleKmValue = (event) => {
        const { x } = event;
        setQuantityX({ x: x});
    };
    

    然后,如果我改变 <select> 必须执行此函数

    const calculatePrice = () => {
        console.log(quantityKm.x);
        setValueMonth((parseFloat(quantityKm.x.toFixed(2)) * valueOfKm))
    };
    

    但是,我总是得到 quantityKm.x 作为0

    1 回复  |  直到 5 年前
        1
  •  1
  •   Mickey    5 年前

    从您的评论来看,您的代码结构如下:

    const [quantityKm, setQuantityX] = useState({ x: 0 });
    
    const handleKmValue = ...
    const calculatePrice = ...
    
    const handleChange = event => {
        handleKmValue(event);
        calculatePrice();
    }
    
    <Select onChange={handleChange} />
    

    相反,使用:

    const [quantityKm, setQuantityX] = useState({ x: 0 });
    
    useEffect(() => {
        // move the calculatePrice functionality into the effect
        console.log(quantityKm.x);
        setValueMonth((parseFloat(quantityKm.x.toFixed(2)) * valueOfKm))
    
    }, [quantityKm.x]) // run effect if value's changed
    
    <Select onChange={handleKmValue} />