组件应该写入 React js 应用程序中的存储吗?
Should component writes into store in React js app?
允许直接从 React 组件写入存储是一个好主意,还是一种反模式? (不使用调度程序)
组件应具有单一职责(SOLID 原则之一)- 呈现UI 视图。如果它写入商店,则违反了此原则。
为了获得更多的组件可重用性 - 最好删除不必要的依赖项。直接写入存储 UI 组件的情况将取决于存储实现。更好的是 - 从调度程序中删除依赖项。使用道具明确设置回调:
const Component = React.createClass({
render: function() {
return <button onClick={ this.props.onClick }></button>;
}
});
<Component onClick={ callDispatcher } />
在这种情况下,您的 Component
是最可重用的。您甚至可以在具有不同 'flux' 实现的不同项目中使用它。
在 Redux 中看到许多好主意 - 它从组件中删除了尽可能多的依赖项。在 Redux 中,您拥有所有组件 "dumb" / "pure"(它们没有状态),您可以通过函数将状态附加到组件,该函数通过参数获取组件(例如,Redux 的 connect
) .它还调用了higher-order组件。
A higher-order component is just a function that takes an existing
component and returns another component that wraps it.
See more details(来自 Redux 作者 Dan Abramov)。
允许直接从 React 组件写入存储是一个好主意,还是一种反模式? (不使用调度程序)
组件应具有单一职责(SOLID 原则之一)- 呈现UI 视图。如果它写入商店,则违反了此原则。
为了获得更多的组件可重用性 - 最好删除不必要的依赖项。直接写入存储 UI 组件的情况将取决于存储实现。更好的是 - 从调度程序中删除依赖项。使用道具明确设置回调:
const Component = React.createClass({ render: function() { return <button onClick={ this.props.onClick }></button>; } }); <Component onClick={ callDispatcher } />
在这种情况下,您的
Component
是最可重用的。您甚至可以在具有不同 'flux' 实现的不同项目中使用它。
在 Redux 中看到许多好主意 - 它从组件中删除了尽可能多的依赖项。在 Redux 中,您拥有所有组件 "dumb" / "pure"(它们没有状态),您可以通过函数将状态附加到组件,该函数通过参数获取组件(例如,Redux 的 connect
) .它还调用了higher-order组件。
A higher-order component is just a function that takes an existing component and returns another component that wraps it.
See more details(来自 Redux 作者 Dan Abramov)。