Устранение неполадок setState в контексте (реагировать на родной) - PullRequest
0 голосов
/ 12 октября 2018

Я рендерил много текстовых компонентов и сохранял позиции (чтобы прокрутить их), но я хотел бы улучшить производительность, «связав» ее с помощью отката (и открыты для других предложений, которые могут повысить производительность).

  ...
  import debounce from 'lodash/debounce'
  ...
  class ContextProvider extends Component {
  ....
  setContentPosition = (layout, key) => {
    const contentPos = { ...this.state.contentPos }
    contentPos[key] = layout.nativeEvent.layout.y
    // TODO: make it debounce https://stackoverflow.com/questions/23123138/perform-debounce-in-react-js
    this.setState({ contentPos }, () => console.log('contPos updated'))
  }
  ...
  render() {
    return (
      <Provider
        value={{
          setContentPosition: this.setContentPosition,
        }}
      >
        {this.props.children}
      </Provider>
    )
  }
}

Я попробовал пару разных комбинаций, но без удачи.Ожидал, что это сработает:

  ...
  render() {
    return (
      <Provider
        value={{
          setContentPosition: debounce(this.setContentPosition, 200),
        }}
      >
        {this.props.children}
      </Provider>
    )
  }
}

Выдает следующую ошибку:

error message

Обновление 01

Следующее изменение (для contentPos[key])

  setContentPosition = (layout, key) => {
    const contentPos = { ...this.state.contentPos }
    //console.log(layout.nativeEvent)
    contentPos[key] = layout.nativeEvent
    // TODO: make it debounce https://stackoverflow.com/questions/23123138/perform-debounce-in-react-js
    this.setState({ contentPos }, () => {
      console.log('contPos updated')
    })
  }

отображает это предупреждение вместо:

enter image description here

Позиция должна использоватьсядля прокрутки к текстовому компоненту (при поиске) и у меня есть тестовый код, который прокручивается до некоторого Text компонента - работает на iOS, но не на Android?

...