У меня есть компонент response.js, где я хочу передать кучу разных методов дочерним компонентам из родительского компонента, методы изменят состояние родительского компонента.Передача нескольких методов в пределах одной пропитки React.js
class Page extends Component {
constructor(props) {
super(props);
this.state = {
items: this.props.items,
currentItemID: 1
};
this.actions = this.actions.bind(this);
}
render() {
return (
<div className="page">
{
this.state.items.map(item =>
<Item key={item._id} item={item} actions={this.actions} />
)
}
</div>
);
}
actions() {
return {
insertItem: function (itemID) {
const currentItems = this.state.items;
const itemPosition = this.state.items.map((item) => item._id).indexOf(itemID);
const blankItem = {
_id: (new Date().getTime()),
content: ''
};
currentItems.splice(itemPosition + 1, 0, blankItem)
this.setState({
items: currentItems,
lastAddedItemID: blankItem._id
});
},
setCurrentItem: function (itemID) {
this.setState({ currentItemID: itemID });
},
focus: function(itemID) {
return (itemID === this.state.currentItemID);
}
}
}
В моем детском компоненте, я пытаюсь использовать метод фокусировки в методе componentDidMount lifecyle, как показано ниже:
componentDidMount() {
if (this.props.actions().focus(this.props.item._id)) {
this.nameInput.focus();
}
}
Однако я получаю ошибку
Uncaught TypeError: Cannot read property 'currentItemID' of undefined
в определении метода фокусировки, в рамках методов действий. Может ли кто-нибудь указать мне в правильном направлении, почему я получаю ошибку или альтернативный способ передать несколько действий дочерним компонентам?
Я думаю, ваша основная ошибка - то, что вы называете своими действиями внутри метода - это создаст некоторые неожиданные проблемы, попытайтесь передать объект дочернему элементу, а не функции, и если вы используете es5 - свяжите 'this' внутри каждая функция (ее основная ошибка) –
Можете ли вы привести мне пример того, как связать одну из функций с «этим», пожалуйста? – Hirvesh
.bind (this) - как в ответе ниже –