Самый упрощенный рабочий пример представлен на github!!!
У меня есть простое приложение, чтобы научиться создавать приложения с помощью React Native и Redux. Насколько я понимаю, если вы отображаете данные из состояния избыточности в своем методе рендеринга, а затем значения этого состояния изменяются, тогда значение также будет изменено, и реакция повторно отображает все компоненты, которые необходимо повторно визуализировать из-за изменения состояния.
Приложение доступно на github: https://github.com/schingeldi/checklist
Это действительно просто. У меня есть обзор, если вы нажмете на статус записи, вы попадете на подробную страницу. Если вы нажмете «Отметить xxx», статус изменится в состоянии редукции (согласно журналам), но не обновится в обзорной сцене.
В основном у меня есть Обзор.js:
class Overview extends Component {
constructor(props) {
super(props);
this.state = {fetching:false};
}
entries() {
// console.log("Overview");
// console.log(this.props);
// console.log(this.props.entries);
return Object.keys(this.props.entries).map(key => this.props.entries[key]);
}
componentDidMount() {
this.setState({fetching:true});
this.props.actions.getEntries()
.then( (res) => {
this.setState({fetching: false});
})
}
handleChange(entryId) {
Actions.detail({id: entryId});
}
render() {
return (
<View>
<ScrollView>
{ !this.state.fetching && this.entries().map((entry) => {
return (
<TouchableHighlight key={entry.id}>
<View >
<Text>{entry.name}</Text>
<TouchableHighlight onPress={(entryId ) => this.handleChange(entry.id)}><Text>{entry.status}</Text></TouchableHighlight>
<Text>---------------------------</Text>
</View>
</TouchableHighlight>
)
}
)
}
{this.state.fetching ? <Text>Searching </Text> : null }
</ScrollView>
</View>
)}
}
function mapStateToProps(state) {
return {entries: state.default.entries };
}
function mapDispatchToProps(dispatch) {
return {actions: bindActionCreators(actions,dispatch)};
}
export default connect(mapStateToProps, mapDispatchToProps)(Overview);
При нажатии на статус ( {entry.status} ) я открываю другую сцену Details.js:
class Detail extends Component {
constructor(props) {
super(props);
this.state = {}
}
componentWillMount() {
this.setState({
entry: this.props.entries[this.props.id]
})
}
patchEntry(newStatus) {
console.log("Details: patchEntry with " + this.props.id +" and " + newStatus );
this.props.actions.patchEntry(this.props.id, newStatus);
}
render() {
return (
<View>
<Text>{this.state.entry.name}</Text>
<TouchableHighlight onPress={() => this.patchEntry('done')}><Text>Mark done</Text></TouchableHighlight>
<TouchableHighlight onPress={() => this.patchEntry('cancelled')}><Text>Mark cancelled</Text></TouchableHighlight>
</View>
)
}
}
function mapStateToProps(state) {
console.log(state);
return {entries: state.default.entries };
}
function mapDispatchToProps(dispatch) {
return {actions: bindActionCreators(actions,dispatch)};
}
export default connect( mapStateToProps, mapDispatchToProps)(Detail);
И у меня есть действие и редьюсер, которые вызываются отлично, когда нажимается один из TouchableHighlights. Я даже вижу в логах, что состояние меняется при выводе всего состояния.
Но мой вопрос в том, как мне обновить статус на сцене обзора, как только я вернусь (всплываю) из сцены деталей?
Если вам нужна дополнительная информация, дайте мне знать, но ее должно быть просто воспроизвести, поскольку я написал целое рабочее приложение. Просто клонируйте, установите npm и запустите его.
Большое спасибо за твою помощь.