ich eine static fetchData
Methode auf meiner Route Komponente bin mit ...(Universal React + Redux + React-Router) Wie vermeidet man das erneute Abrufen von Routendaten beim ersten Laden des Browsers?
const mapStateToProps = (state) => ({
posts: state.posts
})
@connect(mapStateToProps)
class Blog extends Component {
static fetchData (dispatch) {
return dispatch(fetchPosts())
}
render() {
return (
<PostsList posts={this.props.posts} />
)
}
}
... und Sammeln aller Versprechungen vor der ersten auf der Seite Server machen ...
match({ routes, location }, (error, redirectLocation, renderProps) => {
const promises = renderProps.components
.filter((component) => component.fetchData)
.map((component) => component.fetchData(store.dispatch))
Promise.all(promises).then(() => {
res.status(200).send(renderView())
})
})
Es funktioniert gut , der Server wartet, bis alle meine Versprechen vor dem Rendern der App gelöst sind.
nun auf meinem Client Skript, ich bin etwas ähnliches wie auf dem Server zu tun ...
...
function resolveRoute (props) {
props.components
.filter((component) => component.fetchData)
.map((component) => component.fetchData(store.dispatch))
return <RouterContext {...props} />
}
render((
<Provider store={store}>
<Router
history={browserHistory}
routes={routes}
render={resolveRoute} />
</Provider>
), document.querySelector('#app'))
Und es funktioniert gut. Aber, wie Sie abziehen können, auf der ersten Seite Rendern wird die statische fetchData
wird zweimal aufgerufen (einmal auf dem Server und einmal auf dem Client), und ich will das nicht.
Gibt es Vorschläge, wie Sie das lösen können? Empfehlungen?
Aber mit diesem Weg würde ich nicht Server Seite Versprechen Auflösung verlieren? – kevinwolf