React Redux应用程序中的单个事件,集成了传统库

时间:2018-02-11 11:48:01

标签: reactjs redux react-redux

我有一个使用Redux的React应用程序来处理应用程序的整体状态,该应用程序还集成了一些旧的Javascript库来呈现特定的查看器(在画布上)。旧版库为查看者管理自己的状态(我无法访问它)。我现在知道我的一个组件需要在另一个组件中触发查看器上的事件(例如,使用旧库重置查看器)。

我可以想到两个解决方案:

  1. 通过道具提供给查看器组件的Redux状态更改(例如{reset: true})。在查看器组件重置查看器后,它直接重置状态本身(例如`{reset:false})。
  2. 绕过Redux并使用某种PubSub模式使这些组件直接相互通信,而不会进行任何Redux状态更改。
  3. 有推荐的方法吗?有什么优点/缺点?选项1的一个缺点似乎是当状态第二次更新({reset: false})时会触发重新渲染。

1 个答案:

答案 0 :(得分:1)

我提出的另一种方法是指定重置的时间。 如果时间改变,这将触发重新渲染。

on dispatch(reset())

动作:

/var/railroad/{{host_role}}/shared/config/secrets.yml:
  file.managed:
    - source: salt://rails/secrets.yml
    - mode: 400
    - user: railroad-{{host_role}}
    - group: railroad-{{host_role}}
    - template: jinja
    - defaults:
        role: host_role
        db_username: m_u
        db_password: {{ salt['grains.get_or_set_hash']('some:place:secret_key_base') }}

STORE:

reset(){
  return({
   type:constant.RE_RENDER,
   payload: new Date().getTime()
  })
}

视图只会更新一次。使用另一个pub-sub系统会增加不必要的复杂性,建议不要绕过redux模式。