Why is React not rendering my component state correctly?

前端 未结 1 1068
暖寄归人
暖寄归人 2020-12-22 05:07

I\'ve tried this with both a class component:

class Foo extends React.Component {
    x = 3;
    componentDidMount () {
        fetch(apiURL).then(() => {         


        
相关标签:
1条回答
  • 2020-12-22 05:33

    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.

    0 讨论(0)
提交回复
热议问题