StackNavigator против созданияStackNavigator - PullRequest
0 голосов
/ 26 февраля 2019

Я обновляю свое приложение с Reaction-Navigation 1.5 до 3.0.9.Мне не ясно, в чем разница в управлении состоянием компонентов, но я уверен, что они есть.Раньше это работало нормально, теперь ведет себя странно.Похоже, что состояние как-то кешируется, и, просматривая и возвращаясь к этому компоненту, state.params.letter остается прежним, даже когда мне это не нужно.Разве государство не должно быть уничтожено, если я изменю мнение?

Компонент имеет очень простую логику, он показывает FlatList элементов.Если присутствует пропеллер letter, он показывает только элементы, начинающиеся с этой буквы.

export default class Search extends Component {
    constructor(props) {
        super(props);
    }
    DB = null;
    componentDidMount(){
        //check for the param "letter"
        let L = this.props.navigation.state.params ? this.props.navigation.state.params.letter : null;
        this.setState({
            DB: L ? this.DB.getStartWith(L) : this.DB.getAll()
        })
    }
    render() {
        const { params } = this.props.navigation.state;
        const { t, i18n, navigation } = this.props;


        return (
            <View>
                <FlatList data={this.state.DB}
                    renderItem=({item}) => <Text> {item} </Text>
                />
            </View>
        );
    }

}

1 Ответ

0 голосов
/ 26 февраля 2019

Как работает навигатор стека реагирующей навигации, он сохраняет стек различных экранов, чтобы при нажатии кнопки «Назад» он знал, какой экран вы посетили в последний раз.Когда вы передаете параметр, как в вашем случае:

this.props.navigation.state.params.letter

Состояние сохраняется в стеке реагирующей навигации и будет оставаться там до тех пор, пока вы не «уничтожите» свой экран (например, возвращаясь с этого экрана)Например, если ваш стек выглядит как (screen1> search), а затем вы переходите на screen2, чтобы он стал (screen1> search> screen2) , будет уничтожено внутреннее состояние компонента поиска, но не состояние реакции реагирования , поэтому, если вы вернетесь назад, буква параметра будет такой же, единственный способ уничтожить этот параметр - вернуться к screen1.Альтернативой является сохранение вашего буквенного параметра с использованием что-то вроде redux , в общем, я стараюсь избегать передачи переменных с использованием параметров реагирования-навигации, если только это не параметр, связанный с самой навигацией (например, параметры навигации).

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