Реагировать параметры навигации не сбрасывается? - PullRequest
0 голосов
/ 28 февраля 2019

У меня есть экран фильтра и экран поиска.Когда пользователь переходит с экрана поиска, я передаю условие поиска с экрана поиска на главный экран.Точно так же я делаю то же самое для экрана фильтра (передавая filterOptions с экрана фильтра на домашний экран).

Теперь, когда я перехожу с экрана фильтра на домашний экран, я хочу установить для searchTerm значение null и аналогично, если я иду из поискас экрана на домашний экран Я хочу установить для параметра filterOptions значение null, как я могу это сделать?

В приведенном ниже коде строки A и B не устанавливаются значения filterOptions и searchTerm на ноль, поэтому фильтрация и поискне работает, потому что когда filterOptions не является нулевым, я хочу, чтобы searchTerm был нулевым, что означает, что только фильтр должен работать на этом экземпляреТочно так же, если filterOptions имеет значение null, searchTerm не должен быть нулевым, что означает, что в этом экземпляре должен работать только поиск.

Код:

filterProjectResults = (projects) => {

      let filterOptions = this.props.navigation.getParam('filterOptions', null);
      let searchTerm = this.props.navigation.getParam('searchTerm', null);

      console.log('Initial filterOptions ', filterOptions);  --> initially null
      console.log('intital searchTerm ', searchTerm); --> initially null


      if(filterOptions !== null){ 
        console.log('Inisde filter screen ', filterOptions)
        let display_filtered_projects = projects.filter((item) => item.floorplans.some(val => filterOptions.includes(val.bhk)));
        searchTerm = null;  <--- Line A
        return display_filtered_projects;

      } else if (searchTerm !== null) {
        console.log('Inside Search screen ', searchTerm);
        let search_filter_projects = projects.filter(
          (project) => {
            return project.name.toLowerCase().indexOf(searchTerm.toLowerCase()) !== -1
          }
        );
        filterOptions = null;   <<--- Line B
        return search_filter_projects;

      }

  }

search.js:

<TouchableOpacity onPress={() => this.props.navigation.navigate('Projects', {searchTerm : this.state.text})}>
    <Image source={require('../../assets/images/search.png')} style={{width: 24, height: 24, resizeMode: 'contain'}}/>
</TouchableOpacity>

filter.js:

<TouchableOpacity onPress={() => this.props.navigation.navigate('Projects', {filterOptions: this.state.filterOptions})}>
    <View style={styles.filterButton}>
        <Text style={styles.filterButtonText}>Apply Filters</Text>
    </View>
</TouchableOpacity>

Я передаю отфильтрованные или найденные данные в Flatlist для отображения результатов.Если я пытаюсь реализовать это, используя состояние, я получаю ошибку -> https://imgur.com/a/P4vyRsu код: https://gist.github.com/aditodkar/1df0175e2b13727daaae0373040f8dcf

1 Ответ

0 голосов
/ 01 марта 2019

Когда вы звоните

this.props.navigation.navigate('Projects', {searchTerm : this.state.text})}>, вы также можете добавить filterOptions: null вот так

this.props.navigation.navigate('Projects', {searchTerm : this.state.text, filterOptions: null})}?

А затем для другого вы можете позвонить

this.props.navigation.navigate('Projects', {searchTerm : this.state.text, searchTerm: null})}

Вы также можете позвонить this.props.navigation.setParams(params) и установить для них значение NULL в любое время.

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...