useContext简单使用

如果需要在组件之间共享状态,可以使用useContext()。

先引入createContext并创建一个Context

const ContContext = createContext()

需要共享状态的组件使用.Provider包裹,需要共享的数据放在value

<ContContext.Provider value={count}>
    <TestCom />
</ContContext.Provider>

完整代码

import { useState, createContext, useContext } from 'react';
import { Button } from "antd";

const ContContext = createContext()

function TestCom() {
    let count = useContext(ContContext)
    return (
        <h2>
            测试子组件:{count}
        </h2>
    )
}

function Demo04() {

    const [count, setCount] = useState(0)

    return (
        <div>
            <h1>{count}</h1>
            <Button onClick={() => { setCount(count + 1) }}>点击按钮+1</Button>

            <ContContext.Provider value={count}>
                <TestCom />
            </ContContext.Provider>
        </div>
    )
}

export default Demo04

效果如图

useContextuseReducer都是React的Hook函数,用于处理状态管理和组件之间的数据传递。 1. useContext:用于在组件中获取和共享全局状态。它接收一个Context对象作为参数,并返回该Context的当前值。这个值是由最近的上层Context.Provider组件提供的。使用useContext可以避免使用props将状态传递到多个嵌套组件中。 例子: ```javascript const MyContext = React.createContext(); function ParentComponent() { const value = "Hello, useContext!"; return ( <MyContext.Provider value={value}> <ChildComponent /> </MyContext.Provider> ); } function ChildComponent() { const contextValue = React.useContext(MyContext); return <div>{contextValue}</div>; } ``` 2. useReducer:用于管理复杂的状态逻辑。它接收一个reducer函数和初始状态作为参数,并返回当前状态和dispatch函数。reducer函数接收当前状态和action作为参数,并根据action类型来更新状态。使用useReducer可以将状态和对状态的更新逻辑封装在一个函数中,使组件更加清晰和可维护。 例子: ```javascript function reducer(state, action) { switch (action.type) { case 'INCREMENT': return { count: state.count + 1 }; case 'DECREMENT': return { count: state.count - 1 }; default: throw new Error(); } } function Counter() { const [state, dispatch] = React.useReducer(reducer, { count: 0 }); return ( <div> Count: {state.count} <button onClick={() => dispatch({ type: 'INCREMENT' })}>+</button> <button onClick={() => dispatch({ type: 'DECREMENT' })}>-</button> </div> ); } ``` 总结: - useContext用于获取全局状态,避免了props的传递,适用于简单的状态共享。 - useReducer用于管理复杂的状态逻辑,将状态和更新逻辑封装在一个函数中,适用于较为复杂的状态管理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值