Javascript React组件-为什么可以在AsyncApp组件中分派
参考这个例子Javascript React组件-为什么可以在AsyncApp组件中分派,javascript,react-native,redux,Javascript,React Native,Redux,参考这个例子 import React,{Component}来自“React” 从“道具类型”导入道具类型 从“react redux”导入{connect} 进口{ 选择SubReddit, 如果需要, 无效subreddit }来自“../actions” 从“../components/Picker”导入选择器 从“../components/Posts”导入帖子 类AsyncApp扩展组件{ 建造师(道具){ 超级(道具) this.handleChange=this.handleC
import React,{Component}来自“React”
从“道具类型”导入道具类型
从“react redux”导入{connect}
进口{
选择SubReddit,
如果需要,
无效subreddit
}来自“../actions”
从“../components/Picker”导入选择器
从“../components/Posts”导入帖子
类AsyncApp扩展组件{
建造师(道具){
超级(道具)
this.handleChange=this.handleChange.bind(this)
this.handleRefreshClick=this.handleRefreshClick.bind(this)
}
componentDidMount(){
const{dispatch,selectedSubreddit}=this.props
分派(FetchPostSifRequired(selectedSubreddit))
}
componentDidUpdate(prevProps){
if(this.props.selectedSubreddit!==prevProps.selectedSubreddit){
const{dispatch,selectedSubreddit}=this.props
分派(FetchPostSifRequired(selectedSubreddit))
}
}
handleChange(下一步){
this.props.dispatch(选择subreddit(nextSubreddit))
this.props.dispatch(fetchPostsIfNeeded(nextSubreddit))
}
手柄刷新点击(e){
e、 预防默认值()
const{dispatch,selectedSubreddit}=this.props
分派(无效Subreddit(已选择Subreddit))
分派(FetchPostSifRequired(selectedSubreddit))
}
render(){
const{selectedSubreddit,posts,isFetching,lastUpdated}=this.props
返回(
{lastUpdated&&(
上次更新时间{new Date(lastUpdated).toLocaleTimeString()}.{'}
)}
{!正在抓取&&(
刷新
)}
{isFetching&&posts.length==0&&Loading…}
{!isFetching&&posts.length==0&&Empty.}
{posts.length>0&&(
)}
)
}
}
AsyncApp.propTypes={
selectedSubreddit:PropTypes.string.isRequired,
posts:PropTypes.array.isRequired,
isFetching:PropTypes.bool.isRequired,
最后更新:PropTypes.number,
调度:需要PropTypes.func.isRequired
}
函数MapStateTops(状态){
const{selectedSubreddit,postsBySubreddit}=state
const{isFetching,lastUpdated,items:posts}=postsBySubreddit[
选择子reddit
] || {
是的,
项目:[]
}
返回{
选择SubReddit,
帖子,
很吸引人,
最近更新
}
}
导出默认连接(MapStateTops)(AsyncApp)
该函数可以使用此.props.dispatch(fetchPostSifRequired(nextSbreddit))触发类似“fetchPostSifRequired”的操作。但是,它假定与mapDispatchToProps相关。那么,我可以知道程序运行成功且无错误的场景吗欢迎来到So
实际上,connect()
已经为您的组件提供了分派。()
您可以使用mapDispatchToProps
作为中间件,使用dispatch创建方法
假设我们有一家有状态计数器的商店
{
counter: 0
}
在mapDispatchToProps
中,我们可以在此组件中使用创建方法:
{
increment: ()=>{dispatch({ type: 'EDIT', payload: 1 })},
decrement: ()=>{dispatch({ type: 'EDIT', payload: -1 })}
}
connect传递调度如果未传递第二个参数进行连接,请参阅-
{
increment: ()=>{dispatch({ type: 'EDIT', payload: 1 })},
decrement: ()=>{dispatch({ type: 'EDIT', payload: -1 })}
}