#reactjs #redux #react-redux
#reactjs #redux #реагировать-redux
Вопрос:
Я не хочу вызывать метод store.subscribe. Я просто хочу синхронизировать состояние хранилища с состоянием компонента. Я пытаюсь создать корзину покупок — есть компонент cartItems, который отображает SignleCartItem, передавая реквизиты компоненту SingleCartItem с помощью функции map.
Всякий раз, когда пользователь обновляет количество SignleCartItem отправляет действие, и магазин сохраняет общее количество товаров, добавленных в корзину, и их цену.
Теперь проблема заключается в том, что компонент, который отображает промежуточный итог и общее количество товаров в корзине, не синхронизирует состояние магазина с его состоянием (которое отображает общее количество).
Сделать это просто:
Один компонент обновляет состояние хранилища, другой компонент не синхронизирует его во время выполнения.
PS: Пожалуйста, не обращайте внимания на детали продукта: P
Комментарии:
1. Я не знаю, понял ли я вашу проблему. Сохраняете ли вы одно и то же значение (общее) как в хранилище, так и в состоянии компонента cartItems?
2. нет, я сохраняю общее количество в хранилище redux и хочу синхронизировать его с другим компонентом, который отображает общее количество элементов и вычисляет другие вещи.
Ответ №1:
Если я вас правильно понял, вы хотите показать состояние хранилища «общее» в вашем компоненте. Вам необходимо подключить свой компонент к хранилищу. Пример в es6:
class SomeComponent extends React.Component{ ... }
const mapStateToProps = state => ({total:state.total});
export default connect(mapStateToProps)(SomeComponent);
документ о функции redux connect находится здесь:
https://github.com/reactjs/react-redux/blob/master/docs/api.md
Комментарии:
1. на самом деле я не использую контейнер connect. Для этой цели я использую react komposer.
Ответ №2:
Если вы хотите отслеживать изменения, внесенные в хранилище redux, как вы сказали в своем названии, вы можете попробовать redux-logger. Вы сможете видеть в консоли Google Chrome каждое созданное действие и все изменения в вашем магазине, например
Ответ №3:
Вместо store.subscribe()
того, чтобы использовать react-redux для связывания Redux с React .
В корневом компоненте импортируйте хранилище, созданное с createStore()
помощью и предоставьте его компоненту с помощью Provider
import App from './App.js'
import store from './store/index.js'
import {Provider} from 'react-redux'
const myApp = () => (
<Provider store={store}>
<App />
</Provider>
);
ReactDOM.render(<myApp />, document.getElementById("root"));
Затем внутри любого компонента, который вы хотите прослушать, используйте connect
для соединения частей состояния, которые вы хотите в этом компоненте, сопоставляя их с реквизитами
import {connect} from 'redux-react'
class App extends React.Component {
render(){
return (
<div>
<h1>{this.props.title}</h1>
<div>
)
}
}
Сопоставьте состояние с реквизитами перед экспортом компонента
const mapStateToProps = (state) => {
title: state.title
}
export default connect(mapStateToProps)(App)