javascript - 对 Mobx getDerivedStateFromProps 的误解

标签 javascript reactjs observable mobx mobx-react

我对 getDerivedStateFromProps 如何与 Mobx 可观察对象有一些误解。我知道,Mobx 对“读取”属性(通过“点入”)、可跟踪函数等使用react。

例如,我存储了可观察对象。

class SomeStore {
    @observable
    status = {
        state: 'NOT_INITED',
    };

    @action
    async setStatusState = () => {
        this.status.state = 'STARTED';

        await something();
        this.status.state = 'ENDED';
    }

}

接下来,我注入(inject)了组件

@inject('someStore')
@observer
export default class SomeInjectedComponent extends Component {
    render() {
        return (
            <SomeComponent
                status={this.props.someStore.status}    
            />
        );
    }
}

结束我已经结束了组件

@observer
export default class SomeComponent extends Component {
    state = { isLoading: true }

    static getDerivedStateFromProps(props, state) {
        console.log(props.status.state);

        if (props.status.state === 'SUCCESS') {
            return { isLoading: false }
        }

        return null;
    }

    render() {
        if (!this.state.isLoading) {
           return null;`enter code here`
        }

        return <div>Loading</div>
    }
}

问题是,在 console.log(props.status.state) 中,我只看到 NOT_INITEDSTARTED。但是 ENDED 没有出现。

我猜是因为我在 render 方法中没有this.props.status.state。如果我将它添加到渲染中(即使只是 console.log),一切正常。

我应该怎么做才能看到 getDerivedStateFromProps 的变化?

谢谢。

最佳答案

也许您应该在您的商店中添加“isLoading”标志。它看起来像这样:

class SomeStore {
    @observable
    status = {
        isLoading: false,
        state: 'NOT_INITED',
    };

    @action
    async setStatusState = () => {
        this.status.state = 'STARTED';
        this.status.isLoading = true;

        await something();
        this.status.state = 'ENDED';
        this.status.isLoading = false;
    }

}

你的组件

@observer
export default class SomeComponent extends Component {

    render() {
        const { isLoading } = this.props.status
        if (!isLoading) {
           return null;
        }

        return <div>Loading</div>
    }
}

关于javascript - 对 Mobx getDerivedStateFromProps 的误解,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55491280/

相关文章:

javascript - 使用 jQuery 切换复选框 css 样式

javascript - 在一个 TR 中求和 TD

angular - 我如何编写 NgRx 8 Effect 来触发 promise 的 Action

angular - 捕获异常并在 View 中显示错误消息

angular - HttpParams 与 Put 和 Post 一起使用将返回类型更改为 Angular 6 中的 Observable<HttpEvent<T>>

javascript - 解构数组并在一行中分配给属性对象

javascript - 为什么在堆栈条形图中删除条形图然后重新添加条形图会改变条形图的位置?

javascript - 根据按钮显示特定元素

reactjs - 捆绑 React/Express 应用程序用于生产

reactjs - redux-form V6 自定义组件