Я использую response-native-navigation (не уверен, будет ли это актуально) и пытаюсь работать с простыми реквизитами.Тем не менее, когда я иду на ScreenB из ScreenA, он работает без каких-либо ошибок.После этого, если я pop()
показываю экран ScreenA и затем снова нажимаю на тот же компонент, чтобы перейти к ScreenB, приложение вылетает со следующей ошибкой:
Вы попытались установить ключ a
со значением 2
для объекта, который должен быть неизменным и заморожен.
Вот минимальный пример кода в ScreenA: Preview
:
import React, { Component } from 'react';
import { View, Text, TouchableOpacity } from 'react-native';
import { navigationActions } from 'react-native-navigation';
export default class Preview extends Component {
constructor(props) {
super(props);
this.state = {
data: { a: 0, b: 1, c: 2 }
};
}
_goToFullview() {
let temp = this.state.data;
temp.a = 2;
this.setState({ data: temp });
this.props.navigator.push({ screen: "App.FullView", passProps: { data: this.state.data } });
}
render() {
return (
<View>
<Text>{"a: " + this.state.data.a + ","}</Text>
<Text>{"b: " + this.state.data.b + ","}</Text>
<Text>{"c: " + this.state.data.c}</Text>
<TouchableOpacity onPress={ () => this._goToFullview() }>
<Text>Go To Fullview</Text>
</TouchableOpacity>
</View>
)
}
}
И вот ScreenB: FullView
:
import React, { Component } from 'react';
import { View, Text, TouchableOpacity } from 'react-native';
import { navigationActions } from 'react-native-navigation';
class Fullview extends Component {
render() {
return (
<View>
<Text>{"a: " + this.props.data.a + ","}</Text>
<Text>{"b: " + this.props.data.b + ","}</Text>
<Text>{"c: " + this.props.data.c}</Text>
<TouchableOpacity onPress={ () => this.props.navigator.pop({ animated: true, animationType: 'fade' }) }>
<Text>Go back to preview</Text>
</TouchableOpacity>
</View>
)
}
}
Я считаю, что приведенной выше информации должно быть достаточно, чтобы понять мою проблему.Кто-нибудь может объяснить, почему это происходит, и простое решение или подсказку, чтобы это исправить?