タグオブジェクトのリストが配列(tagList)にあり、これをサーバーから取り出して状態に格納しています。成功したフェッチの後、私は各項目をScrollView
の中にマッピングしています。プレスネームを反応ネイティブの配列に挿入します
export default class RegisterTags extends Component {
constructor(props) {
super(props)
this.state = {
tagList: [],
selectedTags: [],
}
}
componentWillMount() {
api.getTagsOnRegister()
.then((res) => {
this.setState({
tagList: res
})
})
}
insertTag = (tag) =>{
this.setState({
selectedTags: this.state.selectedTags.push(tag)
})
}
render() {
return(
<View style={styles.container}>
<ScrollView contentContainerStyle={styles.ScrollViewContainer}>
{this.state.tagList.map((tag) => {
return(
<View style={styles.tagStyle} key={tag.id} onPress={this.insertTag(tag)}>
<Text style={styles.tagText}>{tag.name}</Text>
</View>
)
})}
</ScrollView>
</View>
)
}
}
私が達成したいのは、いずれかのタグを押すと、そのオブジェクトをselectedTags配列に追加したいと思います。しかし、私はエラーを取得しています:
Warning: setState(...): Cannot update during an existing state transition (such as within
render
or another component's constructor). Render methods should be a pure function of props and state; constructor side-effects are an anti-pattern, but can be moved tocomponentWillMount
.Possible Unhandled Promise Rejection (id: 0): _this.state.selectedTags.push is not a function TypeError: _this.state.selectedTags.push is not a function
どのように私はselectedTags配列に押し込まタグ項目を追加することができますか?
うわー。私はこれほど多くを実現することはありませんでした。働いてくれてありがとうございます。このコンセプトについてもう少し理解してもらえますか? 'onPress = {this.insertTag(tag)}'のような関数を呼び出すと、自動的に 'render'の関数が呼び出され、この' onPress => {()= {this.insertTag(tag)}のような関数が呼び出されます。 } 'は、pressの関数だけを呼び出しますか? –
こんにちは、私は矢印の機能を説明するための答えを編集しました –