栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

反应多个上下文

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

反应多个上下文

您仍然可以通过16.3 Context
API来使用子级功能消费者节点,这是React文档建议的做法:

// Theme context, default to light themeconst ThemeContext = React.createContext('light');// Signed-in user contextconst UserContext = React.createContext({  name: 'Guest',});class App extends React.Component {  render() {    const {signedInUser, theme} = this.props;    // App component that provides initial context values    return (      <ThemeContext.Provider value={theme}>        <UserContext.Provider value={signedInUser}>          <Layout />        </UserContext.Provider>      </ThemeContext.Provider>    );  }}function Layout() {  return (    <div>      <Sidebar />      <Content />    </div>  );}// A component may consume multiple contextsfunction Content() {  return (    <ThemeContext.Consumer>      {theme => (        <UserContext.Consumer>          {user => ( <ProfilePage user={user} theme={theme} />          )}        </UserContext.Consumer>      )}    </ThemeContext.Consumer>  );}

要在组件的上下文中使用函数,通常将组件包装在HOC中,以便将上下文作为prop传递:

export const withThemeContext = Component => (  props => (    <ThemeContext.Consumer>      {context => <Component themeContext={context} {...props} />}    </ThemeContext.Consumer>  ))const YourComponent = ({ themeContext, ...props }) => {  themeContext.someFunction()  return (<div>Hi Mom!</div>)}export default withThemeContext(YourComponent)

如果您正在运行React 16.8+,则还可以使用钩子更干净地执行此操作,而无需使用HOC:

import React, { useContext } from "react"const YourComponent = props => {  const theme = useContext(ThemeContext)  const user = useContext(UserContext)}

或者,如果您大量使用这些上下文,则可以制作一个自定义钩子以进一步简化操作:

const useTheme = () => useContext(ThemeContext)const useUser = () => useContext(UserContext)const YourComponent = props => {  const theme = useTheme()  const user = useUser()}


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/608842.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号