Я установил контекст, поля которого обновляются вызовом API:
export const CharacterContext = React.createContext()
export class CharacterProvider extends Component {
constructor(props) {
super(props);
this.state = {
text: "test, test",
name: "no-name",
id: "999",
currStamina: 0,
abilities: {
"bra": 0,
"agi": 0,
"int": 0,
"cun": 0,
"will": 0,
"pre": 0
},
skills: [],
characters: [],
getCharacter: this.getCharacter,
}
}
getCharacter = (id) => {
CharacterDataService.getCharacterById(id)
.then(
response => {
console.log(response);
this.setState({
name: response.data.username,
maxStamina: response.data.stamina,
currStamina: response.data.stamina,
id: response.data.id,
abilities: response.data.abilities,
skills: response.data.skills
});
}
);
}
render() {
return (
<CharacterContext.Provider
value={this.state}>
{
this.props.children
}
</CharacterContext.Provider>
)
}
}
export const CharacterConsumer = CharacterContext.Consumer
Еще один элемент поместил Провайдера и Потребителя внутрь для целей тестирования. Он получает состояние от провайдера, но даже если элемент отображается ПОСЛЕ обновления контекста (через маршрутизатор), он показывает исходные значения (возможности установлены на 0 и т. Д.).
export default class Edit extends React.Component {
static contextType = CharacterContext;
constructor(props) {
super(props);
}
render() {
return (
<CharacterProvider>
<CharacterConsumer>
{({text, currStamina}) => (
<p>{text} : {currStamina}</p>
)}
</CharacterConsumer>
<Abilities/>
</CharacterProvider>
)
}
}
Чего мне не хватает? Почему значения в контексте обновляются вызовом API, но потребительский элемент по-прежнему показывает исходные значения?