Reactjs 数据更新时不呈现本机平面列表(Redux)
我有一个问题,我的平面列表没有呈现我要求的项目。我用来呈现列表的数据成功地从我的Redux存储中获得,我正在将存储水合到我呈现平面列表的同一个组件的componentDidMount中。我注意到组件两次点击render方法,但是在需要将数据提供给renderItem道具时,它似乎仍然没有数据 我在我的CardBuilder中放置了一个调试器,并注意到它在第一次对每个项目命中一次,但是由于this.props.picskit未定义,因此它不会呈现。即使在父元素中,picskitz已经在商店中进行了氢化处理并且可以访问,它也不会再次被击中。如何让平面列表尝试使用原始数据源再次渲染?我最终想给它添加无限滚动,但现在我只想得到至少要渲染的前25个值(单页)。任何帮助都非常感激 这是我的组件:Reactjs 数据更新时不呈现本机平面列表(Redux),reactjs,react-native,redux,Reactjs,React Native,Redux,我有一个问题,我的平面列表没有呈现我要求的项目。我用来呈现列表的数据成功地从我的Redux存储中获得,我正在将存储水合到我呈现平面列表的同一个组件的componentDidMount中。我注意到组件两次点击render方法,但是在需要将数据提供给renderItem道具时,它似乎仍然没有数据 我在我的CardBuilder中放置了一个调试器,并注意到它在第一次对每个项目命中一次,但是由于this.props.picskit未定义,因此它不会呈现。即使在父元素中,picskitz已经在商店中进行了
componentDidMount(){
const { dispatch, user, token, history } = this.props
const { pageNumber } = this.state
const LOGIN = 'LOGIN'
if ( token && user ){
dispatch({ type: LOGIN, user: {user, token} })
dispatch(getAllPicskitz(pageNumber, token, history))
} else {
dispatch(getAllPicskitz(pageNumber, user.token, history))
}
}
这是我的清单:
keyExtractor = ( picskit, index) => picskit.id.toString()
render(){
const { picskitz } = this.props
return(
<View style={styles.container}>
<View style={styles.headerContainer}>
<Image
source={ require('../media/logo-with-color.png')}
/>
</View>
<FlatList
data={picskitz}
renderItem={ ({picskit}) => <CardBuilder picskit={picskit} /> }
keyExtractor={this.keyExtractor}
/>
<LowerNavBar />
</View>
)
}
keyExtractor=(picskit,index)=>picskit.id.toString()
render(){
const{picskitz}=this.props
返回(
}
keyExtractor={this.keyExtractor}
/>
)
}
最后,这里是我试图呈现的“CardBuilder”组件:
render(){
const {picskit} = this.props
if ( picskit !== undefined ){
return (
<View style={styles.container}>
<View style={styles.headerContainer}>
<View style={styles.titleContainer}>
<Text style={styles.titleText}> {picskit.title} </Text>
</View>
<View style={styles.detailsContainer}>
<View style={styles.viewsContainer}>
<Image
source={ require('../media/icon-glasses.png')}
/>
<Text> {picskit.views} </Text>
</View>
<Text style={styles.detailsText}> {picskit.owner.name} </Text>
</View>
</View>
<ImageBackground
source={{uri: JSON.parse(picskit.content)[0].aws_url}}
style={styles.mainImage}
>
<Image
source={ require('../media/frame-black.png')}
style={{width: '100%', height: '100%'}}
/>
</ImageBackground>
</View>
)
}
return null
}
}
render(){
const{picskit}=this.props
if(picskit!==未定义){
返回(
{picskit.title}
{picskit.views}
{picskit.owner.name}
)
}
返回空
}
}
我找到了一个可能的答案,但我不确定这是实现它的最有效或正确的方法。首先,我添加了一些条件逻辑,仅当我首先有数据时才呈现平面列表。看起来是这样的:
{ picskitz ?
<FlatList
data={picskitz}
renderItem={ ({item}) => <CardBuilder item={item} /> }
keyExtractor={(x, i) => i.toString() }
onEndReached={this.loadMore}
/>
:
null
}
您会注意到调度正在等待,在再次调用render()之前,请确保数据正确位于存储区中,这意味着在呈现CardBuilder组件之前,FlatList现在将拥有50个完整列表(之前加载的25个)
如果有人提出建议,我非常乐意接受 我找到了一个可能的答案,但我不确定这是实现它的最有效或正确的方法。首先,我添加了一些条件逻辑,仅当我首先有数据时才呈现平面列表。看起来是这样的:
{ picskitz ?
<FlatList
data={picskitz}
renderItem={ ({item}) => <CardBuilder item={item} /> }
keyExtractor={(x, i) => i.toString() }
onEndReached={this.loadMore}
/>
:
null
}
您会注意到调度正在等待,在再次调用render()之前,请确保数据正确位于存储区中,这意味着在呈现CardBuilder组件之前,FlatList现在将拥有50个完整列表(之前加载的25个)
如果有人提出建议,我非常乐意接受 如果平面列表的数据属性发生更改,则它将自动重新渲染。这意味着数据没有从redux存储成功传递到组件。无论您从存储中获取数据并将其作为道具传递到哪里,我都会开始仔细检查代码和调试。如果平面列表的数据道具发生更改,则它将自动重新渲染。这意味着数据没有从redux存储成功传递到组件。无论您从存储中获取数据并将其作为道具传递到哪里,我都会开始仔细检查代码和调试。您忘记将额外数据道具传递到您的平面列表
extraData={picskitz}
如果{picskitz}值发生变化,这会告诉FlatList重新加载您忘记将extraData道具传递给FlatList
extraData={picskitz}
如果{picskitz}值更改,如果数据(
picskitz
)只更改了很浅(它是相同的引用),那么它将不会触发渲染方法。如果数据(picskitz
)只更改了很浅(它是相同的引用),那么它将不会触发渲染方法。感谢您的建议!我仔细检查了一遍,我确信正确地传递了存储数据并将其包含在我的组件中,我只是没有正确地格式化我的平面列表。谢谢你的建议!我仔细检查了一遍,我确信正确地传递了存储数据,并将其保存在我的组件中,我只是没有正确地格式化我的平面列表。