useContext就是vue的provide/inject

通常,当我们需要将数据从父组件传递到子组件时,我们使用 props。想象一下这样的结构:你有一些深嵌套的组件,而你只需要来自深嵌套子组件中父组件的某些内容。在这种情况下,你仍然需要将 prop 传递到整个组件链中,这可能会很烦人。
Context 设计目的是为了共享那些对于一个组件树而言是“全局”的数据,例如当前认证的用户、主题或首选语言。举个例子,在下面的代码中,我们通过一个 “theme” 属性手动调整一个按钮组件的样式。
image.png
useContext示例

  1. import React, { useContext, useState } from "react";
  2. const ThemeContext = React.createContext();
  3. function App() {
  4. const [themes, setThemes] = useState({
  5. value: {
  6. foreground: "#000000",
  7. background: "#eeeeee",
  8. },
  9. });
  10. return (
  11. <ThemeContext.Provider value={themes.value}>
  12. <Toolbar />
  13. <button
  14. onClick={() => {
  15. setThemes({
  16. value: {
  17. foreground: "#ffffff",
  18. background: "#222222",
  19. },
  20. });
  21. }}
  22. >
  23. click black
  24. </button>
  25. </ThemeContext.Provider>
  26. );
  27. }
  28. function Toolbar() {
  29. return (
  30. <div>
  31. <ThemedButton />
  32. </div>
  33. );
  34. }
  35. function ThemedButton() {
  36. const theme = useContext(ThemeContext);
  37. return (
  38. <button style={{ background: theme.background, color: theme.foreground }}>
  39. I am styled by theme context!
  40. </button>
  41. );
  42. }
  43. export default App;

https://react.docschina.org/docs/context.html#reactcreatecontext
https://v3.cn.vuejs.org/guide/component-provide-inject.html#%E5%A4%84%E7%90%86%E5%93%8D%E5%BA%94%E6%80%A7

在class组件中使用context

static contextType = MyContext; // 声明使用的context后,就可以使用this.context.属性访问MyContext中的属性

this.context.store