首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在React上使用Redux重新渲染所有页面

如何在React上使用Redux重新渲染所有页面
EN

Stack Overflow用户
提问于 2018-02-16 05:04:55
回答 2查看 546关注 0票数 0

我正在使用一个组件来翻译屏幕上的文本。

这是我的T类

代码语言:javascript
运行
复制
//Redux store located in app.js
import { store } from "app.js";

export default class T {
  /**
   * finds the variable in store and returns the translation if exists.
   * @param {String} key
   */
  static _(key) {

    const state = store.getState();
    const translations = state.get("global").get("translations");

    if (translations[key]) {
      return translations[key];
    }

    return `*${key}*`;
  }
}

我像这样使用这个类

代码语言:javascript
运行
复制
import T from 'libraries/T';
import React from 'react';

export default MyClass extends React.Component {
    render(){
        return (<div>Here we write translation of name : {T._('name')}</div>)
    }
}

我的问题从这里开始,用户可以使用位于标题中的下拉列表来更改语言。当用户更改下拉列表时,我会更新存储中的语言日期。但是页面不会呈现新的值。当我转到另一个页面时,可以看到新的语言值。

但我想在saga或reducer中重新渲染页面。这个是可能的吗?

EN

回答 2

Stack Overflow用户

发布于 2018-02-17 09:40:32

据我所见,你直接从组件内部访问存储,它不能检测到任何状态的变化,因为它没有订阅Redux存储,我建议你使用React Redux。(github,包含存储库和文档)

使用React Redux,您可以使用Redux来包装您的组件,为它订阅connect存储的任何更改,然后从存储中提取所需的状态,并触发组件的呈现,将该状态作为属性传递。提取所需状态是使用mapStateToProps函数(documentation)完成的。

我推荐阅读、理解和使用React Redux,因为它有一个相对简单的应用程序接口,但却非常强大和有用。

此外,在您的代码中,您可以在MyClass组件中使用connect,通过传递给connectmapStateToProps提取所需的状态,并将该状态作为属性传递。这样您可能就不需要T类了,您可以使用mapStateToProps函数(它将具有包含在_(key)方法中的相同逻辑)来完成相同的任务。

票数 3
EN

Stack Overflow用户

发布于 2018-02-16 06:28:50

@fobus,如果你每次调用T时都尝试使用setState来更新状态,页面将自动呈现。

您可以使用函数(例如dropDownChange),用于每当用户选择新语言时更新状态。

您是否可以测试类似以下代码的内容:

代码语言:javascript
运行
复制
import T from 'libraries/T';
import React from 'react';

export default class extends React.Component {
  constructor(props) {
    super(props);
    this.state = {translationDate: {}};
    this.dropDownChange = this.dropDownChange.bind(this);
  }

  dropDownChange(name) {
    const data = T._(name);
    this.setState({translationDate: data});
  }

  render() {
    return (<div>Here we write translation of name : {this.state.translationDate}</div>)
  }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48816253

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档