javascript - ReactJS 和分离模型

标签 javascript html reactjs

我将 ReactJS 视为我的应用程序中的 View ,它有一个模型和一堆组件。我可以看到我的模型如何与 React 对话,但 React 如何与我的应用程序的其余部分对话?

将数据或模型传入 React 非常简单:

var ui = ReactDOM.render(<UI model={model} />, document.getElementById('ui'));

我假设你可以像这样设置模型:

constructor(props) {
  super(props); 
  this.state = {
    model: this.props.model
  }
}

尽管根据文档,state 应该被视为不可变的,因为它不会立即更新。所以我无法通过 state 访问我的模型,I have a very bad codepen example here展示我是如何让它以错误的方式工作的。我还能怎么做?

最佳答案

实际上有数百种方法可以将 React View 层与底层模型连接起来。在模型方面,React 本身是完全不可知的。


但是,有一些有趣的方法可以解决这个问题并证明了自己。

其中之一是 Facebook 的 Flux pattern 。它基于数据存储的想法,这些数据存储与 React 组件分开保存,而不直接依赖于它们。相反,您的模型数据的更改是通过分派(dispatch)操作(例如用户登录、应用过滤器)来完成的,这可以被认为是类似的事件。然后,这些操作由中央调度程序分发到不同的商店。

每个商店都持有应用程序状态的不同部分,并根据分派(dispatch)的操作不断更新它。您的 React 组件现在可以选择它们需要呈现的状态部分,并订阅对应用程序状态的这个特定部分的更改。

Flux pattern
(来源:github.io)

通过应用此模式,您可以保持 React 组件之间的依赖关系,React 组件将您的用户界面呈现为应用程序状态的函数,而存储则代表您的应用程序模型并包含所有业务逻辑。

这可以确保您的应用程序的各个部分保持可重用和可替换,并且您的应用程序的状态始终保持一致。


但是请注意,如上所述,这只是众多可能方法中的一种。不过,了解使该模式如此强大的单向数据流和不可变数据结构背后的值(value)可能是一个很好的切入点。

关于javascript - ReactJS 和分离模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37933171/

相关文章:

jquery - 无论内容高度如何,都将页脚保持在窗口底部

javascript - 在 ReactJs 中更新组件更新时更新 jQuery slick carousel

javascript - React JS 中的 props 是否可以使用点表示法?

javascript - 如何将 slider 步长值设置为一些固定值?

javascript - 通过 jQuery 隐藏 Bootstrap 选项卡上的空元素

html - PHP : When submitting an HTML form, 是否设置了 HTTP_REFERER?

javascript - 你应该如何在 React.js 中调试 JSX?

javascript - 有没有办法禁止在日期输入中键入/粘贴,而只允许用户从 AntD 中的日期选择器中进行选择?

Javascript 问题 - 使用 getElementById 间歇性地找不到元素

javascript - 如何在 canplay 事件中设置 HTMLMediaElement 的 .currentTime,调用播放并避免调度暂停事件?