Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/411.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript React组件-为什么可以在AsyncApp组件中分派_Javascript_React Native_Redux - Fatal编程技术网

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 })}
}