【发布时间】:2019-05-04 14:35:34
【问题描述】:
我是 react-native 和 redux 的新手。我有一个 flatList 来显示来自使用 redux 的 api 调用的列表详细信息。每当我尝试编辑/删除列表项时,flatList 不会在更改后重新呈现。
我也尝试了 extraData 道具,但没有任何结果。认真寻求帮助!
<FlatList
data={this.state.vacationsDataSource}
keyExtractor={(item, index) => index}
extraData={this.props.Vacations_reducer.vacationsData}
renderItem={({ item }) => (
<View style={styles.mainView_contact}>
<View style={{ flexDirection: "row" }}>
<View style={styles.Txt_hight}>
<Text style={styles.SecName}>Start date </Text>
</View>
<View>
<Text style={styles.name2}>
{dateFormat(item.vacationFrom, "mmmm dS, yyyy")}
</Text>
</View>
</View>
这是我的 componentWillRecieveProps 方法,
componentWillReceiveProps(nextProps) {
if (this.props.Vacations_reducer.vacationsData != nextProps.Vacations_reducer.vacationsData) {
this.setState({
vacationsDataSource: nextProps.Vacations_reducer.vacationsData
});
}
}
我的组件DidMount,
componentDidMount() {
this.props.onRenderFetchVacations().then((res) => {
this.setState({
vacationsDataSource: this.props.Vacations_reducer.vacationsData
});
});
Keyboard.addListener("keyboardDidShow", this._keyboardDidShow);
Keyboard.addListener("keyboardDidHide", this._keyboardDidHide);
BackHandler.addEventListener('hardwareBackPress', this.handleBackPress);
}
我的减速器看起来像这样,
const VacationDetailReducer = (state = DEFAULT_STATE_VAC, action) => {
switch (action.type) {
case VAC_FETCH_LOADING:
return {
...state,
isLoading: true
};
case VAC_FETCH_SUCCESS:
return {
...state,
isLoading: false,
vacationsData: action.vacationsData
};
case VAC_FETCH_FAIL:
return {
...state,
isLoading: false,
vacationsData: action.vacationsData
};
case ADD_VAC_FETCH_SUCCESS:
return {
...state,
//isLoading: false,
addVacationData: action.addVacationData
};
case ADD_VAC_FETCH_FAIL:
return {
...state,
//isLoading: false,
addVacationData: action.addVacationData
};
case UPDATE_VAC_FETCH_SUCCESS:
return {
...state,
//isLoading: false,
updateVacationData: action.updateVacationData
};
case UPDATE_VAC_FETCH_FAIL:
return {
...state,
//isLoading: false,
updateVacationData: action.updateVacationData
};
case DELETE_VAC_FETCH_SUCCESS:
return {
...state,
//isLoading: false,
deleteVacationData: action.deleteVacationData
};
case DELETE_VAC_FETCH_FAIL:
return {
...state,
//isLoading: false,
deleteVacationData: action.deleteVacationData
};
default:
return state;
}
};
export default VacationDetailReducer;
【问题讨论】:
-
我实际上没有看到您执行“编辑”一行的代码。基本上,一旦您确定了代码,您就需要确保再次分配您的列表,例如。
[...items]。不仅仅是item.abc = 123。因为items引用没有被刷新,所以不会通过状态改变触发渲染。 -
编辑功能也是基于api调用的,所以我这里没有添加代码。我只是想知道如何根据更新/删除重新渲染flatList。你能详细解释一下吗? @windmaomao
标签: reactjs react-native redux