【发布时间】:2020-09-30 00:49:26
【问题描述】:
我已经从上下文文件中传递了一个状态变量和函数:
用户上下文:
import React, { useState } from 'react';
const UserContext = React.createContext();
function UserProvider({ children }) {
var [userImages, setUserImages] = useState({
avatar: '/static/uploads/profile-avatars/placeholder.jpg'
});
return (
<UserContext.Provider
value={{
userImages,
setUserImages
}}
>
{children}
</UserContext.Provider>
);
}
export default UserContext;
export { UserProvider };
此时UserImages 只是一个带有一个属性的对象,即avatar
这是我的应用程序正在被 Provider 包装(请忽略 redux 的实现,我只是想试试 Context)
import React from 'react';
import { Provider } from 'react-redux';
import { UserProvider } from './UserContext';
import App from 'next/app';
import withRedux from 'next-redux-wrapper';
import { PersistGate } from 'redux-persist/integration/react';
import reduxStore from '../store/index';
import withReactRouter from '../with-react-router/with-react-router';
class MyApp extends App {
static async getInitialProps({ Component, ctx }) {
const pageProps = Component.getInitialProps
? await Component.getInitialProps(ctx)
: {};
return { pageProps };
}
render() {
const { Component, pageProps, store } = this.props;
return (
<UserProvider>
<Provider store={store}>
<PersistGate persistor={store.__PERSISTOR} loading={null}>
<Component {...pageProps} />
</PersistGate>
</Provider>
</UserProvider>
);
}
}
我正在尝试使用 post 之后的 setState 函数更新一些上下文
但是我仍然收到TypeError: Cannot read property 'avatar' of undefined
这是状态对象的形状:
userData:
setUserImages: ƒ ()
userImages:
avatar: "/static/uploads/profile-avatars/placeholder.jpg"
或
userData : {
setUserImages : SetUserImages function,
userImages : {
avatar : "/static/uploads/profile-avatars/placeholder.jpg"
}
}
我的组件:
function ImageUploader({ userData }) {
var { avatar } = userData.userImages;
var setUserAvatar = userData.setUserImages;
function avatarUpdater(avatarPath) {
setUserAvatar({ userData: { ...userData.userImages.avatar, avatarPath } });
}
}
有人知道为什么会这样吗?
【问题讨论】:
-
您可能需要先确认
userData和userData.userImages,然后才能从中获取avatar。userData来自哪里?这个问题与 react-context 有什么关系? -
@TonyNguyen 你是对的,也许我应该更新我的问题,我添加了一些上下文......
-
你在哪里使用
ImageUploader?
标签: reactjs react-hooks react-context use-state