response-native-draggable-flatlist сброс перетаскивания при использовании с shouldComponentUpdate
Я работаю над реактивным приложением, в котором я использую response-native-draggable-flatlist для одного из списка, и, к сожалению, мне приходится использовать shouldComponentUpdate в компоненте для манипулирования данными из другого элемента списка в другом компоненте, но после добавления shouldComponentUpdate, мое перетаскивание не работает, я могу перетаскивать, но он немедленно сбрасывает весь список в исходное положение.
Пожалуйста, помогите мне с некоторыми предложениями, как заставить работать перетаскивание вместе с shouldComponentUpdate, поскольку я не хочу нарушать существующую функциональность
Код
<DraggableFlatList
scrollPercent={5}
data={testData}
renderItem={this.renderItem}
keyExtractor={item => `item-${testkey}`}
onMoveEnd={({ data }) => {
this.setState({ data });
}}
/>
public shouldComponentUpdate(nextProps, nextState) {
if (nextProps.data.length !== nextState.data.length) {
this.setState({
data: nextProps.data
})
}
return true
}
2 ответа
shouldComponentUpdate
не предназначен для выполнения побочных эффектов. Он используется для подсчета рендеринга редуктора для изменений свойств для повышения производительности.
shouldComponentUpdate должен возвращать true или false, определяя, должен ли компонент повторно визуализироваться.
Вы можете использовать componentDidUpdate
который срабатывает после изменения реквизита, отражает или componentWillReceiveProps
который срабатывает до отражения опоры
Я рекомендую использовать componentDidUpdate
нравиться
componentDidUpdate = (prevProps, prevState) => {
if (this.props.data.length !== this.state.data.length) {
this.setState({
data: nextProps.data
})
}
}
Вы не должны использовать shouldComponentUpdate
для этого. Если вы просто копируетеprops.data
в state.data
, почему бы просто не использовать props.data
прямо?
Если абсолютно необходимо выполнять копирование при каждом обновлении, рассмотрите возможность использования другого метода жизненного цикла, например componentDidUpdate
или getDerivedStateFromProps
. Вы также можете использоватьcomponentWillReceiveProps
, но он устарел, и его следует избегать.