我正在构建一个post
有comments
的react native应用。我只想
当用户单击comments
时显示load comments...
。问题
是如何处理每个帖子(有多个帖子)的状态。我试过了
这,但是不起作用(renderPost是一个循环):
const renderPost = ({ item, index}) => {
let fetchComments = false;
return (
<View style={[t.mB6]}>
<View style={[t.roundedLg, t.overflowHidden, t.shadow, t.bgWhite, t.hAuto]}>
<TouchableOpacity
key={item.id}
onPress={() => {
fetchComments = true;
}}>
<Text style={[t.fontBold, t.textBlack, t.mT2, t.mL4, t.w1_2]}>
load comments...
</Text>
</TouchableOpacity>
</View>
{ fetchComments ? <Comments postId={item.id}/> : null }
</View>
)
}
在上面的代码中,当用户单击let fetchComments
时,我将load comments...
设置为true。
答案 0 :(得分:2)
renderPost是一个没有自己的渲染和状态的功能组件,您可以通过在其父React.Component中通过renderPost道具传递改变状态的函数来解决此问题。
示例:
//imports
class FatherComponentWithState extends React.component{
state={
fetchComments:false,
//(...OTHERSTUFFS)
}
setFetchComments = () =>{
this.setState({fetchComments:true})
}
render(){
return(
//(...FatherComponentStuffs)
{new renderPost({
setFetchComments: this.setFetchComments,
fetchComments:this.state.fetchComments,
//(...renderPostOtherStuffs like item, index)
})}
//(...FatherComponentStuffs)
)}}
renderPost函数将通过以下方式接收它:
const renderPost = (props) =>{
let fetchComments = props.fetchComments;
let setFetchComments = props.setFetchComments;
let item = props.item
let index = props.index
//...renderPost return remains the same
}
PS:如果您有多个renderPost,则可以将fetchComments用作布尔数组,并通过将索引作为setFetchComments函数的参数来将状态设置为true。