Возможно, здесь я смогу прояснить некоторые фундаментальные недоразумения, и это поможет вам встать на правильный путь.
Вы на правильном пути, но нужно внести некоторые изменения:
- Вам необходимо иметь как
mapDispatchToProps
, так и mapStateToProps
, чтобы делать то, что вы хотите делать в своем Counter.js
файле. mapStateToProps
позволит вам сказать Redux: «Какое состояние мне нужно для доступа внутри моего компонента?» Точно так же mapDispatchToProps
позволит вам сообщить Redux: «К каким создателям действий мне нужно получить доступ внутри моего компонента?»
Здесь вам необходимо получить доступ предположительно state.result
для вашего состояния, поэтому ваш mapStateToProps
может выглядеть примерно так:
const mapStateToProps = (state) => ({
result: state.result
})
Точно так же mapDispatchToProps
может выглядеть так:
const mapDispatchToProps = {
addToMemory
}
Затем вы можете связать его с:
export default connect(mapStateToProps, mapDispatchToProps)(Counter);
Затем вы можете получить к нему доступ внутри своего компонента, выполнив от ({result, addToMemory})
до деструктуризацию этих свойств и используя их в компоненте Counter
.
Ваш редуктор - это функция , которая принимает два параметра: предыдущее состояние и объект действия и возвращает совершенно новое состояние. Этот не должен изменять какие-либо существующие переменные. Он должен возвращать новую информацию. См. docs для получения дополнительной информации. Когда вы отправляете addToMemory
, он имеет два поля в объекте: type
и result
. В вашем редукторе вы можете получить к ним доступ, выполнив action.type
и action.result
соответственно. Вот почему вы получаете эту ошибку.
В вашем файле action/index.js
создатель действия add
принимает id
, но ссылается на result
. Измените параметр так, чтобы вместо этого он принимал result
, чтобы не было ошибок.
Может быть полезно при отладке для выполнения некоторых console.log
операторов различных переменных или используйте расширение Redux DevTools Chrome, чтобы помочь отладить некоторые проблемы.