ffx*_*sam 13 javascript reactjs redux
我花了很多时间考虑如何在React中尽可能干净地构建最好的东西.最近我一直在讨论React容器是否应该做什么,除了连接到Redux(或其他数据 - 流星)并渲染/返回单个组件,或者容器是否也应该负责事件处理.例如,这是两个模型之间的折腾:
// ThingContainer.js
import Thing from '../components/Thing';
export default someHigherOrderFunc(/* map state/data to props */)(Thing)
// Thing.js
export default class Thing extends Component {
handleClick() { /* ... */ }
handleMouseEnter() { /* ... */ }
render() {
// Other components rendered here, both container or presentational
}
}
Run Code Online (Sandbox Code Playgroud)
// ThingContainer.js
class ThingContainer extends Component {
handleClick() { /* ... */ }
handleMouseEnter() { /* ... */ }
render() {
// Now Thing can be stateless
return <Thing
onClick={this.handleClick}
onMouseEnter={this.handleMouseEnter}
/>
}
}
export default someHigherOrderFunc()(ThingContainer)
Run Code Online (Sandbox Code Playgroud)
它几乎感觉就像在模型1中,Thing
在某种意义上变成了自己的容器,我不确定我喜欢它.模型2感觉更自然,ThingContainer
不仅处理数据和Redux,还处理事件,触发Ajax请求componentDidMount
,等等.对于第一个模型,如果我想要调用Ajax请求componentDidMount
,它将具有去哪里Thing
似乎不对.
我想知道这些方法中是否存在任何特定的优点或缺陷,或者它是否归结为风格/偏好.
Dan*_*mov 16
在"presentational-ish"中进行AJAX没有任何内在错误,Thing
因为它只是几种方法,而且这个组件从未在不同场景中使用过.你确定之前,不要从表现分裂行为如何在不同环境下的行为变化.
您有这种困境意味着您的组件不需要重复使用.在这种情况下,如何分割它并不重要.两种方式都可以正常工作,所以我会选择更简单的方法(模型1).
稍后您可能会意识到您希望重用相同的look-n-feel但触发不同的AJAX调用,或以不同方式计算道具.此时,您可能希望从中删除事件处理Thing
并创建几个不同的ThingContainer
s,每个处理事件和计算道具的方式略有不同.这是分离表示和行为变得有用的时候.
归档时间: |
|
查看次数: |
1613 次 |
最近记录: |