reactjs - 是否有更简单的语法在消费者中使用上下文变量?

标签 reactjs

<ThemeContext.Consumer>
  {({theme, toggleTheme}) => (
    <button
      onClick={toggleTheme}
      style={{backgroundColor: theme.background}}>
      Toggle Theme
    </button>
  )}
</ThemeContext.Consumer>

我从 here 得到了上面的代码.

是否有其他编写第二行的方法?在我看来,大括号与圆括号混合有点奇怪,我想知道是否有其他书写方式。

最佳答案

  • useContext

您可以使用useContext钩子(Hook),它可以让您读取上下文并订阅其更改,当您想要订阅多个上下文的更改时,这非常方便:

function ThemeTogglerButton() {
  const { theme, toggleTheme } = useContext(ThemeContext); 
  const { ... } = useContext(AnotherContext); 

  return (
    <button
      onClick={toggleTheme}
      style={{backgroundColor: theme.background}}>
      Toggle Theme
    </button>
  );
}

useContext

  • HOC

第二种方法是创建 HOC,它允许您将上下文作为 props 注入(inject)到组件中:

withTheme.jsx(HOC):

export const withTheme = Component => props => (
  <ThemeContext.Consumer>
    {contextProps => <Component {...props} {...contextProps} />}
  </ThemeContext.Consumer>
);

ThemeTogglerButton.jsx:

import { withTheme } from "./withTheme"

const ThemeTogglerButton = ({ theme, toggleTheme }) => {
  return (
    <button onClick={toggleTheme} style={{ backgroundColor: theme.background }}>
      Toggle Theme
    </button>
  );
}

export default withTheme(ThemeTogglerButton);

App.jsx:

import ThemeTogglerButton from "./ThemeTogglerButton";

const App = () => (
  <ThemeContext.Provider value={...}>
    <ThemeTogglerButton />
  </ThemeContext.Provider>
)

关于reactjs - 是否有更简单的语法在消费者中使用上下文变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58459923/

相关文章:

javascript - 由于 webpack 模块解析器而导致 ReactJS 测试文件问题 'cannot find module'

javascript - react 悬念防止后备旋转器闪烁

javascript - react 更新斗争

javascript - ReactJS:如何将 Material-UI 的 <DatePicker/> 的占位符和文本居中?

reactjs - 获取输入组件的 onBlur 属性

reactjs - 循环组件中的钩子(Hook)

javascript - 使用 setState 设置新状态和更改旧状态之间的区别

reactjs - 如何让 VS Code 自动完成 React 生命周期方法?

javascript - 如何使用 hsl 而不是 rgb 进行 scss 全局声明 javascript api

css - 如何在 react 中将响应式 PNG img HTML 转换为 SVG img