Как добавить данные в массив состояний? - PullRequest
0 голосов
/ 27 апреля 2019

У меня есть API, который отвечает мне списком пользователей, я использую фильтры для пользователя для фильтрации результатов, я использую состояние в своем запросе API, и некоторые из них являются массивами, мне нужно добавить выбранные фильтры в массив, но в настоящее время Я заменяю старое состояние новым.

это мой штат:

  this.state = {
   loading: false,
   dataSource: [],
   error: null,
   topics: []
  }

Это мой вызов API:

  getLawyers = () => {
   fetch('https://www.someapi.com/posts?topics[]='+this.state.topics, {method: 
   'GET'}).then((response) => response.json()).then((responseJson) => {
   this.setState({
    loading: false,
    error: responseJson.error || null,
    dataSource: responseJson.data,
    dataSource: [
      ...this.state.dataSource,
      ...responseJson.data
    ],
    loadingMore: false
      });
     }).catch((error) => {
      this.setState({error, loading: false});
     });
    }

и вот где пользователь выбирает темы для поиска:

<Text onPress = {(text) => this.setTopic('topic1')}> Some Topic </Text>
<Text onPress = {(text) => this.setTopic('topic2')}> Some Topic </Text>
<Text onPress = {(text) => this.setTopic('topic3')}> Some Topic </Text>

setTopic():

setTopic(searchedTopic) {
 this.setState({topics: searchedTopic});
}

Я хочу добавить искомые темы в массив в состоянии, вместо того, чтобы заменить его на старую.

Ответы [ 2 ]

1 голос
/ 27 апреля 2019

searchedTopic - это строка, а не массив, поэтому правильный ответ должен быть:

setTopic(searchedTopic) {
 this.setState({topics: [ ...this.state.topics, searchedTopic ] });
}

С ...searchedTopic каждый символ будет добавлен к темам состояния. Например.

["topic1", "topic2", "t", "o", "p", "i", "c", "3"]
1 голос
/ 27 апреля 2019

Это добавит элементы из искомого массива в существующий массив this.state.topics.

 setTopic(searchedTopic) {
 this.setState({topics: [...this.state.topics, searchedTopic]});
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...