【问题标题】:Index.jsx doesn't rerender on state changeIndex.jsx 不会在状态更改时重新呈现
【发布时间】:2019-01-09 22:02:35
【问题描述】:

我使用 react-translated 作为我的 React 应用程序的翻译提供者,index.jsx render 方法是:

ReactDOM.render(
    <TranslationProvider language={store.getState().language} translation={translation}>
        <MuiThemeProvider theme={theme}>
            <Provider store={store}>
                <Routes/>
            </ Provider>
        </MuiThemeProvider>
    </TranslationProvider>,
    document.getElementById('root')
);

然后,我通过调度操作更新全局状态的语言...它可以工作(语言更改)但是这个 render 不会再次调用,并且我的应用程序中的文本不会切换到其他语言。它不应该在state 更改store 时重新渲染吗?

【问题讨论】:

    标签: reactjs state render store


    【解决方案1】:

    需要使用组件生命周期方法componentWillReceiveProps来监听状态变化,如果有props变化,则调用setstate。

    例如

    this.state ={
        language: 'defaultlanguage'
    }
    
    componentWillReceiveProps(nextProps){
        if(nextProps.language !== this.state.props){
           this.setState({
               language: nextProps.language
           }) 
        }
    }
    

    【讨论】:

    • 好的,但是该代码放在哪里呢?组件不通过道具接收语言...在组件中,我使用:&lt;Translate text="app.button.home" /&gt; 组件,其中app.button.home 是翻译数据文件中定义的键。
    猜你喜欢
    • 1970-01-01
    • 2021-07-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-10
    • 1970-01-01
    • 2016-12-05
    • 1970-01-01
    相关资源
    最近更新 更多