У меня есть контейнер компонентReact - Redux: Как связать это с родительским контейнером в es6?
import { AddQuest } from '../components/AddQuest.jsx'
import { connect } from 'react-redux'
import { addQuestActionCreator } from '../actions.js'
const mapStateToProp = (
dispatch,
ownProps
) => {
return {
onClick:() => {
console.log(this);// <-- this represents the window object instead the AddQuest component
dispatch(addQuestActionCreator(this.input.value)); //<-- throws : Uncaught TypeError: Cannot read property 'value' of undefined
this.input.value = '';
}
}
}
export const AddQuestContainer = connect(
undefined,
mapStateToProp
)(AddQuest);
и презентационный компонент
import React from 'react'
import { connect } from 'react-redux'
import { addQuestActionCreator } from '../actions.js'
export const AddQuest = ({onClick}) => {
let input;
return(
<div>
<input type="text" ref={
node =>{
input = node;
}
}/>
<button onClick={onClick.bind(this)}>Add quest</button>
</div>
)
};
Но каждый раз, когда я нажимаю мою кнопку, чтобы добавить квест. У меня есть эта ошибка Uncaught TypeError: Cannot read property 'value' of undefined.
Что-то не так с моим пониманием о bind (this). Я думал, что это передаст ссылку на презентационный компонент на компонент контейнера.
Почему это не так?
Redux отпугивает такое использование локального состояния. Вместо этого вы могли бы передать синтетическое событие или извлеченное значение обработчику - скорее всего, ваш вход не имеет сложной структуры, и это всего лишь текст. В другом случае вы можете использовать компонент redux-form для его обработки. –