Я передал переменную состояния и функцию из файла контекста:
UserContext:
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
Это мое приложение, которое обернуто поставщиком (пожалуйста, не обращайте внимания на реализацию 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>
);
}
}
Я пытаюсь обновить некоторый контекст с помощью функции setState после этого сообщения
Однако я все еще получаю TypeError: Cannot read property 'avatar' of undefined
Это форма объекта состояния:
userData:
setUserImages: ƒ ()
userImages:
avatar: "/static/uploads/profile-avatars/placeholder.jpg"
or
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
? Как этот вопрос связан с response-context? - person Tony Nguyen   schedule 10.06.2020ImageUploader
? - person Vivek Doshi   schedule 10.06.2020