Проблема, с которой вы столкнулись, заключается в том, что вы пытались слишком рано деструктурировать контекст.Лично я бы разделил это на 3 файла.Это также помогает, когда вы используете историю файлов Git!
- User.context.js (это облегчает отслеживание импорта
- Provider - обычно это самый высокий узел (которыйэто действительно нужно!)
- Consumer - компонент, который потребляет значение
User.context.js
:
import { createContext } from "react";
export const UserContext = createContext();
Поставщик - <UserState />
:
import React, { Component } from "react";
import { UserContext } from '../../User.context.js' // some folder for context's
class UserState extends Component {
state = {
user: "JOHN"
};
render() {
return (
<UserContext.Provider value={this.state}>
{this.props.children}
</UserContext.Provider>
);
}
}
export default UserState;
Потребитель - <SignUpForm />
:
<code>import React, { useContext } from "react";
import styled from "@emotion/styled";
import { UserContext } from '../../User.context.js' // some folder for context's
const StyledSignUp = styled.div`
width: 50%;
margin: 20px auto;
`;
// OLD WAY
const SignUpForm = ({ props, ...remainProps }) => {
return (
<UserContext.Consumer>
{context => {
console.log("CONTEXT API", context);
return (
<StyledSignUp {...remainProps}>
<div className="content">content here</div>;
</StyledSignUp>
);
}}
</UserContext.Consumer>
);
};
// React Hook way :)
const SignUpForm = ({ props, ...remainProps }) => {
const context = useContext(UserContext);
return (
<StyledSignUp {...remainProps}>
<div className="content">content here</div>;
{/* Debug - Seeing is believing */}
<pre>{JSON.stringify(context, null, 2)}
);};экспорт по умолчанию SignUpForm;
Дайте мне знать, как вы поживаете!