在父上下文中反应使用上下文值

问题描述

我的app.js文件中有2个上下文:

function App() {
  return (
      <AuthContext>
        <ChildContext>
         <Template />
        </ChildContext>
     </AuthContext>
  );
}

用户注销时,我想访问ChildContext内部的值,但是logout函数位于AuthContext内部:

// inside AuthContext:
const myContext = useContext(ChildContext);
const logout = () => {
  // doing some stuff..
  //
  // here is the problem:
  console.log(myContext.some_value);
}

错误是:

cannot read property 'some_value' of undefined

那是因为ChildContextAuthContext之后声明。 那么如何在some_value内部进入AuthContext

解决方法

在React data flows down中,因此您的选择是:

  1. ChildContext成为AuthContext的父母。
  2. logout函数移至其自己的上下文中
function App() {
  const logout = () => {
    /*...*/
  };
  return (
    <LogoutContext value={logout}>
      <AuthContext>
        <ChildContext>
          <Template />
        </ChildContext>
      </AuthContext>
    </LogoutContext>
  );
}