HOC, который соединяет переданный в компоненте с редуксом с динамическими селекторами состояния, не получающими обновления - PullRequest
0 голосов
/ 12 апреля 2019

Итак, я хочу создать HOC, который возвращает компонент, который будет подключен к redux, то, что компонент будет прослушивать, определяется тем, что передается, поэтому будет динамическим.Вот мой код, но проблема заключается в том, что когда что-то в состоянии изменяется, это не повторный рендеринг возвращаемого компонента.

Любая помощь будет отличной!

export const createSectionList = (providers: SectionListProviders) => {
  const providerNames = Object.keys(providers)

  const mapped = {}

  const mapStateTopProps = (state) => {
    providerNames.forEach((providerName) => {
      const selector = providers[providerName].data

      if (typeof selector === 'function') {
        mapped[`${providerName}`] = selector(state)
      } else {
        mapped[`${providerName}`] = selector
      }
    })

    return mapped
  }

  class GeneratedSectionList extends Component {
    render() {
      const sections: [SectionListProvider?] = []

      providerNames.forEach((providerName) => {
        const {title, renderItem, renderSectionHeader} = providers[providerName]
        const data = this.props[providerName] || []
        sections.push({
          key: providerName,
          title,
          data,
          renderItem
        })
      })

      return (
        <SectionList
        stickySectionHeadersEnabled={true}
        renderSectionHeader={({section}) => {
          const providerName = section.key
          const renderSectionHeader = providers[providerName].renderSectionHeader
          return renderSectionHeader === undefined ?
              <Text style={{fontWeight: 'bold'}}>{'blood'}</Text>
            : 
              renderSectionHeader
        }}
        sections={sections} 
        />
      )
    }
  }

  return connect(mapStateTopProps)(GeneratedSectionList)
}

И поставщики разделов будут выглядеть примерно так, например, с указанием селектора

export default createSectionProvider({
  title: 'Friends ✋',
  renderItem: ({item}) => {
    return (
      <UserCell
        key={item.userId}
        user={item}
        renderer={WideRenderer}
        actionView={BuzzButtonContainer}
        onPress={user => {
          console.log('pressed', user)
        }}
        onAction={(user, action) => {
          console.log(action, user)
        }}
      />
    )
  },
  data: (state) => getFriends(state)
})

Любая причина, почему обновления не будут вызывать повторную визуализацию?Будет ли это как-то связано с динамическим созданием материала mapStateToProps?

Спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...