Правильный способ добавить sh новый элемент в массив объекта состояния в реагировать родной? - PullRequest
0 голосов
/ 02 апреля 2020

Я изо всех сил пытаюсь правильно добавить новый элемент в поле массива моего состояния:

constructor(props) {
  super(props)
  this.state = {
    mockInterest: '',
    interest: [],
    testUser: new User()
  }
}
addItem = () => {
  this.setState({
    // this adds interest to local interest array 
    interest: this.state.interest.concat(this.state.mockInterest)
  })
}
handleClick = () => {

  console.log("logged interest: " + this.state.mockInterest)
  // this logs blank elemnts into the array - no good
  this.setState({
    testUser: {
      interest_tags: [...this.state.testUser.interest_tags, this.state.interest]
    }
  })
  console.log("New interests: " + this.state.testUser.interest_tags)
}
<View style={styles.interestInputView}>
  {/* Interest Input */}
  <TextInput
    style={styles.interestInputText}
    placeholder='Enter an Interest'
    onChangeText={(text) => {
      this.setState({ mockInterest: text })
    }}
  >
  </TextInput>
  <TouchableOpacity
    style={styles.plusImageContainer}
    onPress={this.addItem, this.handleClick}>
    <Image
      style={styles.plusImage}
      source={require('../assets/baseline_add_black_18dp.png')}
    />
  </TouchableOpacity>
</View>

В настоящее время я могу сохранить только текст как mockInterest , но когда я хочу чтобы добавить это к объекту testUser (который имеет поле массива интереса_ тега) в состоянии, mockInterest не добавляется в массив интереса, теги интереса.

Что я делаю не так? Я пытался реализовать это решение , но это тоже не сработало.

1 Ответ

0 голосов
/ 02 апреля 2020

Tyr для использования prevState

this.setState(prevState => ({
  testUser: {
    ...prevState.testUser,
    interest_tags: [this.state.mockInterest, ...prevState.testUser.interest_tags]
  },
}));

Примечание: setState isyn c call Так что вам нужно подождать секунду, прежде чем прочитать его значение.

...