注意:我使用的是 React Native,但这也适用于 Reactjs。我只在设计上使用无状态功能组件。我想尽可能多地学习和使用函数式编程。这是否意味着我永远不能使用connect()
from react-redux
?我应该在我的应用程序设计中添加更多容器组件吗?
这是我的组件的示例:
export const Height = (props, { store }) => {
const state = store.getState()
return (
<View style={formStyles.container}>
<DimenInput
value={state.get('height').get('height1').toString()}
onChangeText={text => store.dispatch(updateHeight(text, 1))}
/>
<Text style={formStyles.text}>{'&'}</Text>
<DimenInput
value={state.get('height').get('height2').toString()}
onChangeText={text => store.dispatch(updateHeight(text, 2))}
/>
</View>
)
}
Height.contextTypes = {
store: React.PropTypes.object
}
我还想学习我将在行业中看到的所有常见的 redux 和 react 技术,所以我想学习mapStateToProps()
和connect()
. 我开始尝试为上面的组件创建这些函数:
const mapStateToProps = (state) => {
return state.get('height').get('height1').toString()
}
const mapDispatchToProps = (dispatch) => {
return {
onHeightChanged: (text) => {dispatch(updateHeight(text, 1))}
}
}
在意识到我不能在这个无状态组件上使用这些功能之前。我必须在一个容器组件上使用它们,该组件基本上可以容纳这个组件,但我真的没有,这个组件的容器是:
export const Volcalc = () => {
return (
<View style={styles.container}>
<Text style={styles.text}>HEIGHT</Text>
<Height/>
<Text style={styles.text}>WIDTH</Text>
<Width/>
</View>
)
}
然后那个容器就是:
const App = () => {
return (
<Provider store={store}>
<Volcalc/>
</Provider>
)
}
我正在制作的应用程序是一个单一的形式 - 所以它很小。在这个阶段,我看不到任何必须使用容器组件的情况。在更大的应用程序中,我是否会被迫使用容器组件,然后才有机会使用connect()
?connect()
如果可以通过任何一种方式完成,哪种技术比仅使用无状态和使用创建的容器更好?
编辑:这个简单的课程在他们拥有可从商店AddTodo
使用的无状态组件dispatch
并对其进行调用的位置之间connect()
进行了一些操作。可能是适合我的用例的场景,Height
尽管我需要继续将它传递给完整的商店,因为它使用store.get
并且store.dispatch
- 除非我将高度的商店值传递给它而不是完整的商店。
通过在容器组件上使用 connect,您可以保持应用程序正常运行。您的数据流向儿童。你的状态是不可变的。
容器组件在连接方面很有用,因为您隔离了对存储的调用,并再次让数据向下流到子组件。这只是构建应用程序并减少应用程序中调用商店的点数的好方法。它使开发更易于管理,并减少了造成混乱的机会。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句