का उपयोग करना: अपोलो क्लाइंट 2.0, रिएक्ट-राउटर v4, रिएक्ट 16 (फाइबर)
उत्तर चयनित पुराने प्रतिक्रिया रूटर v3 का उपयोग करें। ऐप के लिए वैश्विक सेटिंग्स को लोड करने के लिए मुझे 'प्रेषण' करने की आवश्यकता थी। ट्रिक कंपोनेंटविलीपेड का उपयोग कर रहा है, हालांकि उदाहरण अपोलो क्लाइंट का उपयोग कर रहा है, और समाधान नहीं लाने के बराबर है। आपको गुलदस्ते की आवश्यकता नहीं है
SettingsLoad.js
import React, { Component } from 'react';
import { connect } from 'react-redux';
import {bindActionCreators} from "redux";
import {
graphql,
compose,
} from 'react-apollo';
import {appSettingsLoad} from './actions/appActions';
import defQls from './defQls';
import {resolvePathObj} from "./utils/helper";
class SettingsLoad extends Component {
constructor(props) {
super(props);
}
componentWillMount() {
}
componentWillUpdate(newProps) {
const newrecord = resolvePathObj(newProps, 'getOrgSettings.getOrgSettings.record');
const oldrecord = resolvePathObj(this.props, 'getOrgSettings.getOrgSettings.record');
if (newrecord === oldrecord) {
return false;
}
if (typeof newrecord ==='undefined') {
return false;
}
setTimeout(() => {
this.props.appSettingsLoad( JSON.parse(this.props.getOrgSettings.getOrgSettings.record));
}, 1000);
}
componentDidMount() {
}
render() {
const record = resolvePathObj(this.props, 'getOrgSettings.getOrgSettings.record');
return record
? this.props.children
: (<p>...</p>);
}
}
const withGraphql = compose(
graphql(defQls.loadTable, {
name: 'loadTable',
options: props => {
const optionsValues = { };
optionsValues.fetchPolicy = 'network-only';
return optionsValues ;
},
}),
)(SettingsLoad);
const mapStateToProps = (state, ownProps) => {
return {
myState: state,
};
};
const mapDispatchToProps = (dispatch) => {
return bindActionCreators ({appSettingsLoad, dispatch }, dispatch );
};
const ComponentFull = connect(
mapStateToProps ,
mapDispatchToProps,
)(withGraphql);
export default ComponentFull;
App.js
class App extends Component<Props> {
render() {
return (
<ApolloProvider client={client}>
<Provider store={store} >
<SettingsLoad>
<BrowserRouter>
<Switch>
<LayoutContainer
t={t}
i18n={i18n}
path="/myaccount"
component={MyAccount}
title="form.myAccount"
/>
<LayoutContainer
t={t}
i18n={i18n}
path="/dashboard"
component={Dashboard}
title="menu.dashboard"
/>
componentWillMount()
किया। मैंनेmapDispatchToProps()
App.js से संबंधित सभी प्रेषण संबंधित कार्यों को बुलाते हुए एक साधारण फ़ंक्शन को परिभाषित किया और इसे अंदर बुलायाcomponentWillMount()
।