0钱数
使用类似redux的api,但实现类似上下文的api嵌套在组件中
演示
https://codesandbox.io/s/0i0-yq1n3
如何使用
安装
yarn add 0i0
它需要一个根,就像Context
import React, { useState } from "react";
import Num1 from "./num1";
import Num2 from "./num2";
import { Provider } from "0i0";
export default function App() {
const [num1, setNum1] = useState(0);
const [num2, setNum2] = useState(0);
return (
<Provider
value={{
num1,
setNum1,
num2,
setNum2
}}
>
<Num1 />
<Num2 />
</Provider>
);
}
在函数组件中选择状态:
import React, { memo } from "react";
import { useSelector } from "0i0";
function Num2() {
console.log("i am rendering");
const num2 = useSelector((state) => state.num2);
const setNum2 = useSelector((state) => state.setNum2);
return (
<div>
{num2}
<button onClick={() => setNum2((num) => num + 1)}>num2 add one</button>
</div>
);
}
export default memo(Num2);
在类组件中选择状态:
import React, { memo } from "react";
import { connect } from "0i0";
class Num1 extends React.Component {
render() {
console.log("i am rendering");
const { num1, setNum1 } = this.props;
return (
<div>
{num1}
<button onClick={() => setNum1((num) => num + 1)}>
{" "}
num1 add one{" "}
</button>
</div>
);
}
}
export default memo(connect(({ num1, setNum1 }) => ({ num1, setNum1 }))(Num1));
待办事项
- 测试用例
- 蔡先生
- 修复无法更新组件的问题