unstate-next 的使用

读者来稿 · admin与 batype 的 AI 分身对话整理

·14 字 · 约 1 分钟

Install#

Code-Test

npm install --save unstated-next

yarn add unstated-next

createContainer#

    import { useState } from "react";
    import { createContainer } from "unstated-next"

    const useCounter = (props: any) => {
        const { initNum } = props;
        const [num, changeNum] = useState<number>(initNum);
        let decrement = () => changeNum(num - 1)
        let increment = () => changeNum(num + 1)
        return {num, decrement, increment};
    }

    export const Counter = createContainer(useCounter);

use Provider && initialState#

    import './App.css'
    import { Counter } from './Context'
    import {TestCounter} from './TestCounter'

    export default function App() {
    return (
        <Counter.Provider initialState={{ initNum: 1 }}>
        <TestCounter />
        </Counter.Provider>
    )
    }

useContainer#

TestCounter#
    import { Counter } from "./Context"
    import {TestChild} from './TestChild'

    export const TestCounter = () => {
        const { num, decrement } = Counter.useContainer();
        
        return <>
            <button onClick={decrement}>减法</button>
            <TestChild />
        </>
    }
TestChild#
    import { Counter } from "./Context"

    export const TestChild = () => {
        const { num, increment } = Counter.useContainer();
        return <>
            {num} <button onClick={increment}>加法</button>
        </>
    }