Функция Redux connect
позволяет подключить компонент к прикладному хранилищу Redux. После подключения ваш компонент может получить часть текущего состояния хранилища Redux в качестве реквизита (или всего состояния, как в вашем случае).
В этой строке
export default connect(state => state)(Root);
происходят две вещи.
Первый : первый вызов для подключения принимает функцию в качестве первого аргумента. Эта функция, обычно называемая mapStateToProps
, позволяет вам определить, какие свойства хранилища Redux вам нужно сделать доступными для вашего компонента, и под каким именем. В вашем случае ваша функция возвращает все хранилище, как есть, поэтому ваш компонент будет иметь в своих свойствах все свойства хранилища.
Second : второй вызов, это то, что обычно называетсяHOC (High Order Component), функция, которая возвращает React Component. Его аргумент - это компонент, который нужно подключить. Этот компонент будет упакован и получит реквизиты, указанные в первом вызове функции.
const addSomePropsFromReduxStoreTo = connect(state => state)
const connectedRoot = addSomePropsFromReduxStoreTo(Root)
Redux также добавит специальный дополнительный реквизит dispatch
, который позволит вам отправить действие и через него обновить состояние хранилища Redux. Вот почему в вашем методе Root componentDidMount
вы можете сделать:
componentDidMount() {
const { dispatch } = this.props;
dispatch(actions.getUserName({id:1001},(x)=>{console.log(x)}))
}
Если вам интересно, где находится состояние, оно определяется в вашем файле Store.js (с помощью функции createStore
). В корневом компоненте вашего приложения (обычно App.js) у вас должен быть специальный компонент, называемый Provider , который принимает магазин как опору. Благодаря этому специальному компоненту, находящемуся в корне вашего приложения, каждый компонент-потомок может самостоятельно подключаться и получать доступ к магазину.