Использование Redux Reselect и PureComponent - ничего не обновляется - PullRequest
0 голосов
/ 28 октября 2018

Я использую React Redux с Reselect, чтобы выбрать список членов команды и связать его с FlatList.FlatList использует PureComponent для визуализации каждого элемента.

Селектор создает плоский объект для каждого члена команды, без вложенных данных, но когда любое из значений в члене команды изменяется, PureComponent не обновляется.

Я не могу поместить весь код здесь, но вот более простой псевдокод, чтобы показать, что я делаю ...

Получение команды

const mapStateToProps = state => {
    return {
        teamMembers: getTeamMembers(state) // This is a Reselect selector
    }
}

Создание FlatList

<FlatList
    ref={(ref) => { this.listRef = ref }}
    data={this.props.teamMembers}
    renderItem={({item}) => <TeamMemberListItem player={item}></TeamMemberListItem>}
    keyExtractor={(item) => item.playerId.toString()}
    removeClippedSubviews
    disableVirtualization
/>

Компонент элемента

class TeamMemberListItem extends PureComponent {

    constructor(props) {
        super(props)
        this.state = {  }
    }

    render() { 

        return (
            <View style={styles.teamMemberListItem}>
                <Text>{this.props.player.presenceState}</Text>
            </View>
        )
    }
}

После загрузки команды есть задержкаи присутствие каждого члена команды загружается, хранилище обновляется, селектор снова запускается, но listItems не обновляется.

Итак, что я не понимаю, так это когда обновляется PureComponent?Даже если изменение «верхнего уровня» или «не вложенных» данных не вызывает повторного рендеринга, когда это произойдет?Есть ли способ заставить его работать, используя мой текущий селектор, или мне придется вернуться к использованию обычного компонента и постоянно мириться с ошибками YellowBox, говоря, что мой FlatList не оптимизирован?

...