Передача данных ag-grid от дочернего к родительскому - PullRequest
0 голосов
/ 27 июня 2018

Новый реагировать от угловых Получение ошибки:

The above error occurred in the <div> component: in div
Consider adding an error boundary to your tree to customize error handling behavior.

Я не совсем понимаю, почему div и о чем говорит ошибка? Я пытаюсь нажать на строку и передать значения от строки к родителю. В моем родительском компоненте верхнего уровня у меня есть функция, которая устанавливает значение выбранной строки, а в дочерней - выбранная строка передается реквизиту.

Родитель:

class Parent extends React.Component {
  constructor(props) {
    super(props)

    this.state = {
      activeItem: []
    }

    this.setActiveItem = this.setActiveItem.bind(this)
  }

  setActiveItem = userSelect => {
    this.setState({ activeItem: userSelect })
  }

render(){
     <Child activeItem={this.setActiveItem}/>
}

В моем ребенке я использую ag-grid, используя onRowClicked. Ошибка выдается в this.props.setActiveItem(event.data)

class Child extends React.Component {
    constructor(props) {
        super(props)
     }
    onRowClicked = event => {
        //eslint-disable-next-line no-console
        console.log('tester', event.data) //okay, shows data
        this.props.setActiveItem(event.data) //not okay, throws error
      }

    grid = () => {
        return (
          <AgGridReact
            columnDefs={this.state.columnDefs}
            rowData={this.state.data}
            onRowClicked={this.onRowClicked}
          />
        )
      }
    render() {
        if (this.state.data.length > 0) {
          return <div className="ag-mod">{this.grid()}</div>
        }
        return <br />
      }
}
    //also here's the prop for child
    Child.propTypes = {
      setActiveItem: PropTypes.func
    }

1 Ответ

0 голосов
/ 27 июня 2018

Вы передаете setActiveItem от родителя к потомку как activeItem.

<Child activeItem={this.setActiveItem}/>

Итак, ребенок, называйте его именем, которое вы дали, передавая его.

onRowClicked = event => {
    //eslint-disable-next-line no-console
    console.log('tester', event.data) //okay, shows data
    this.props.activeItem(event.data) //not okay, throws error
  }

Кроме того, рассмотрите возможность обернуть ваши компоненты в границу ошибки как упомянутую ошибку. Это помогает. Вы можете прочитать об этом здесь

...