Вызов родительской функции из дочернего компонента в строке React-Native ListView
я видел несколько примеров этого вопроса, но не смог заставить их работать или полностью понять, как все это сочетается. У меня есть компонент ParentListView
и еще называют ChildCell
(строка в listView) я хочу onPress
С ChildCell
для вызова функции в ParentListView
.
class ChildCell extends Component {
pressHandler() {
this.props.onDonePress;
}
render() {
return (
<TouchableHighlight onPress={() => this.pressHandler()} >
<Text>Child Cell Button</Text>
</TouchableHighlight>
);
}
}
и ParentListView
:
class ParentListView extends Component {
//...
render() {
return (
<ListView
dataSource={this.state.dataSource}
style={styles.listView}
renderRow={this.renderCell}
renderSectionHeader={this.renderSectionHeader}
/>
);
}
renderCell() {
return (
<ChildCell onDonePress={() => this.onDonePressList()} />
)
}
onDonePressList() {
console.log('Done pressed in list view')
}
}
я думаю, что это все соответствующий код. Я могу заставить прессу зарегистрироваться, желая ChildCell
, но не может получить способ стрелять в ParentListView
. Что я упускаю?
спасибо заранее!
обновление 1:
на ParentListView
если я изменю реквизит, переданный этому:
<ChildCell onDonePress={this.onDonePressList.bind(this)} />
получить Unhandled JS Exception: null is not an object (evaluating 'this.onDonePressList')
ошибка во время компиляции при отрисовке ячейки.
если я поставлю консоль.войдите непосредственно в систему следующим образом:
<ChildCell onDonePress={() => console.log('Done pressed in list view')} />
он регистрирует сообщение в порядке.
если я оставлю его, как я первоначально:
<ChildCell onDonePress={() => this.onDonePressList()} />
он падает на нажатие с Unhandled JS Exception: null is not an object (evaluating '_this2.onDonePressList')
обновление 2:
OK, Я попытался привязать метод в конструкторе следующим образом:
class ParentListView extends Component {
constructor(props) {
super(props);
this.onDonePressList = this.onDonePressList.bind(this);
this.state = {...};
}
но это дает мне эту ошибку: null is not an object (evaluating 'this.onDonePressList')
и не будет работать.
обновление 3: вот ссылка на родную игровую площадку react
1 ответов
позвонить onDonePress
на pressHandler
такой:
pressHandler() {
this.props.onDonePress()
}
кроме того, bind this
на renderRow
и renderSectionHeader
:
<ListView
dataSource={this.state.dataSource}
style={styles.listView}
renderRow={this.renderCell.bind(this)}
renderSectionHeader={this.renderSectionHeader.bind(this)}
/>
Я привел пример здесь используя вышеуказанные функции.