无法使用自定义钩子更新状态值

时间:2021-04-23 14:17:56

标签: javascript reactjs react-hooks react-component

我创建了一个包含四种状态的自定义钩子。然后我将该钩子导入到两个功能组件中。然后我正在更新第二个组件中的状态之一。但状态在第一个组件中没有改变。

import React , {useState} from "react"

/** Custom hook component **/
const useApp = () => {
    const[millisec , setMillisec] = useState(0)
    const[sec , setSec] = useState(0)
    const[min , setMin] = useState(0)
    const[hr , setHr] = useState(0)

    return {millisec , setMillisec , sec , setSec , min , setMin , hr , setHr}
    
}

export default useApp;

/** 第一个 JS 文件 **/

import React from "react"
import useApp from "../App"
import Interact from "./Interact";

const Timer = () => {
    
    
    const {millisec  , sec  , min  , hr } = useApp();

    return(
        <>
             <div>{hr}</div>
            <div>{min}</div>
            <div>{sec}</div>
            <div>{millisec}</div>
            <Interact />
        </>
    )
}
export default Timer

/** 第二个 JS 文件 **/

import React from "react"
import useApp from "../App"


const Interact = () => {

    const {millisec , setMillisec , sec , setSec , min , setMin , hr , setHr} = useApp();

    const handleStart = () => {
        setMillisec(prev => prev +1)
        
    return(
        <>
        <button onClick = {handleStart}>Start</button>
        <p>{millisec}</p>
        </>
    )
}

export default Interact

我可以在 second.js 文件和自定义钩子文件中更改初始状态值 millisec 但我想在第一个 js 文件中更改 millisec 的值,因为当我更改状态时点击开始按钮

1 个答案:

答案 0 :(得分:0)

把它传下来:

const Timer = () => {
    const { millisec, setMillisec, sec  , min  , hr} = useApp();

   const handleStart = () => {
       setMillisec(prev => prev + 1)
   }

    return(
        <>
             <div>{hr}</div>
            <div>{min}</div>
            <div>{sec}</div>
            <div>{millisec}</div>
            <Interact handleStart={handleStart} millisec={millisec} />
        </>
    )
}