【问题标题】:React Native Context setUser is not a functionReact Native Context setUser 不是一个函数
【发布时间】:2021-04-28 03:27:22
【问题描述】:

我正在尝试使用 React Context 来管理用户是否登录。我到目前为止是这样的:

import AuthUserContext, { AuthUserProvider } from './Components/auth/AuthUserProvider';

function App() {
  const {user, setUser} = React.useContext(AuthUserContext)
  setUser('') // SetUser is not a function
}

App.tsx

import React, { useState, createContext } from 'react';
var user: any, setUser: any;

const AuthUserContext = React.createContext({user, setUser});
export default AuthUserContext;

export const AuthUserProvider = ({ children } : {children: any}) => {
  const [user, setUser] = useState(null);
  
  return (
    <AuthUserContext.Provider value={{ user, setUser }}>
      {children}
    </AuthUserContext.Provider>
  );
};

AuthUserProvider.tsx

这是错误:

TypeError: setUser is not a function. (In 'setUser('')', 'setUser' is undefined)

This error is located at:
    in App (created by ExpoRoot)
    in ExpoRoot (at renderApplication.js:45)
    in RCTView (at View.js:34)
    in View (at AppContainer.js:106)
    in DevAppContainer (at AppContainer.js:121)
    in RCTView (at View.js:34)
    in View (at AppContainer.js:132)

我是新来的本地反应,并且已经尝试解决这个问题几个小时。任何帮助表示赞赏。非常感谢!

【问题讨论】:

  • 组件树中的AuthUserProvider相对于App在哪里?它必须是 App 的祖先,否则 app 将获得未定义的默认值。

标签: javascript reactjs react-redux expo react-context


【解决方案1】:

问题

您的上下文的初始值似乎未定义。

var user: any, setUser: any;

const AuthUserContext = React.createContext({ user, setUser }); // both undefined

解决方案

定义上下文的形状。

var user: any, setUser: any;

const AuthUserContext = React.createContext({
  user: '',
  setUser: () => {}, // <-- indicate setUser is a function
});

Updating Context from a Nested Component

【讨论】:

  • 有效!不得不玩一些类型,但你是对的。非常感谢!
猜你喜欢
  • 1970-01-01
  • 2018-10-19
  • 2016-07-31
  • 2018-09-22
  • 2021-01-26
  • 2022-01-21
  • 2015-09-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多