jotail - API

Jotai 是一个简单而灵活的状态管理库,提供了一些常用的 API 来管理状态。以下是 Jotai 中常用的 API 及其用法说明:

1. atom

atom 是 Jotai 中的基本状态单位,表示一个独立的状态。

import { atom } from 'jotai';

// 创建一个原子
const countAtom = atom(0); // 初始值为 0

2. useAtom

useAtom 是一个 React Hook,用于在组件中使用原子。

import { useAtom } from 'jotai';

const MyComponent = () => {
  const [value, setValue] = useAtom(countAtom);

  return (
    <div>
      <p>当前值: {value}</p>
      <button onClick={() => setValue(value + 1)}>增加</button>
    </div>
  );
};

3. useSetAtom

useSetAtom 是一个 Hook,仅返回原子的更新函数。

import { useSetAtom } from 'jotai';

const MyComponent = () => {
  const setCount = useSetAtom(countAtom);

  return (
    <button onClick={() => setCount((prev) => prev + 1)}>增加</button>
  );
};

4. useAtomValue

useAtomValue 是一个 Hook,仅返回原子的值,而不返回更新函数。

import { useAtomValue } from 'jotai';

const MyComponent = () => {
  const count = useAtomValue(countAtom);

  return <p>当前值: {count}</p>;
};

5. 组合原子

您可以组合多个原子来创建新的原子。例如,创建一个计算值的原子:

const doubleCountAtom = atom((get) => get(countAtom) * 2);

使用组合原子:

const MyComponent = () => {
  const [doubleCount] = useAtom(doubleCountAtom);

  return <p>双倍计数: {doubleCount}</p>;
};

6. 读写原子

您可以创建一个原子,它的值依赖于其他原子的值,或具有异步行为:

const fetchDataAtom = atom(
  null,
  async (get, set) => {
    const response = await fetch('https://api.example.com/data');
    const data = await response.json();
    set(dataAtom, data);
  }
);

7. Provider

在应用程序的根组件中使用 Provider 来提供上下文,虽然 Jotai 默认使用全局状态,但在某些情况下,您可能需要使用 Provider

import { Provider } from 'jotai';

const App = () => (
  <Provider>
    <MyComponent />
  </Provider>
);

8. 其他钩子

  • useAtomCallback: 允许您创建一个回调,该回调可以访问多个原子。

    import { useAtomCallback } from 'jotai';
    
    const MyComponent = () => {
      const callback = useAtomCallback((get, set) => {
        const value = get(countAtom);
        set(countAtom, value + 1);
      });
    
      return <button onClick={callback}>增加</button>;
    };
    

总结

以上是 Jotai 常用的 API 及其用法。Jotai 的设计旨在简单易用,允许您灵活地管理状态。您可以根据需要使用这些 API 来构建复杂的状态管理逻辑。如果您还有其他问题或需要更详细的示例,请随时询问!

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容