React useContext Hook All In One
React useContext Hook All In One
React 带有两个内置的 Hooks 来管理本地状态:useState
和 useReducer
;
如果需要全局状态管理,可以选择加入 React 内置的 useContext
Hook 来将 props 从顶层组件传递到底层组件,从而避免 props 多层透传的问题;
这三个 Hooks 足以实现一个强大的状态管理系统
如果过于频繁地使用 React 的 Context 来处理共享/全局状态, Redux
是现在最流行的状态管理库之一;
它允许你管理应用程序的全局状态,任何连接到其全局存储的 React 组件都可以读取和修改这些状态。
const themes = {
light: {
foreground: "#000000",
background: "#eeeeee"
},
dark: {
foreground: "#ffffff",
background: "#222222"
}
};
const ThemeContext = React.createContext(themes.light);
function App() {
return (
);
}
function Toolbar(props) {
return (
);
}
function ThemedButton() {
// 如果你在接触 Hook 前已经对 context API 比较熟悉,那应该可以理解
// useContext(MyContext) 相当于 class 组件中的 static contextType = MyContext 或者 。
const theme = useContext(ThemeContext);
return (
);
}
https://reactjs.org/docs/hooks-reference.html#usecontext
https://zh-hans.reactjs.org/docs/hooks-reference.html#usecontext
Context
Context 提供了一个无需为每层组件手动添加 props,就能在组件树间进行数据传递的方法。
// Context 可以让我们无须明确地传遍每一个组件,就能将值深入传递进组件树。
// 为当前的 theme 创建一个 context(“light”为默认值)。
const ThemeContext = React.createContext('light');
class App extends React.Component {
render() {
// 使用一个 Provider 来将当前的 theme 传递给以下的组件树。
// 无论多深,任何组件都能读取这个值。
// 在这个例子中,我们将 “dark” 作为当前的值传递下去。
return (
);
}
}
// 中间的组件再也不必指明往下传递 theme 了。
function Toolbar() {
return (
);
}
class ThemedButton extends React.Component {
// 指定 contextType 读取当前的 theme context。
// React 会往上找到最近的 theme Provider,然后使用它的值。
// 在这个例子中,当前的 theme 值为 “dark”。
static contextType = ThemeContext;
render() {
return ;
}
}
https://zh-hans.reactjs.org/docs/context.html
https://github.com/facebook/react/issues/15156#issuecomment-474590693
React useContext
Hook render twice bug ?
https://codesandbox.io/embed/react-usecontext-hook-render-twice-bug-638z3z?file=/src/Test.jsx:932-970
refs
?xgqfrms 2012-2020
www.cnblogs.com/xgqfrms 发布文章使用:只允许注册用户才可以访问!
原创文章,版权所有??xgqfrms, 禁止转载 ???,侵权必究??!