Why is React not rendering my component state correctly?
React only knows to re-render when you tell it something changed, by using the facilities it provides for state management:
class Foo extends React.Component {
// In class components state must be an object
state = {
x: 3,
};
componentDidMount () {
fetch(apiURL).then(() => {
// Note that we change state with the setState method.
this.setState({ x: 5 });
});
}
render () {
return <div>{this.state.x}</div>;
}
}
additionally function components should be pure (no side-effects) so to update them React gives us hooks:
const Foo = () => {
const [x, setX] = useState(3);
useEffect(() => {
fetch(apiURL).then(() => {
// We use the setter returned from useState.
setX(5);
});
}, []);
return <div>{x}</div>;
}
So you can't just assign to a variable and expect React to know: you have to use it's update functions so it knows it needs to re-render that data to the page.