无法评估 React Native FlatList 中的 item.id
2020-11-27
144
我正在尝试使用 React Native 的 FlatList 组件渲染练习列表,但目前无法成功编辑练习的名称。初始渲染时一切都运行顺利。但是,当我尝试编辑练习时,后续重新渲染返回错误
undefined is not an object (evaluating 'item.id')
。如果我检查本地数据库,数据已成功编辑,但将其渲染到屏幕上又是另一个问题。但是,如果我关闭错误显示并重新加载应用程序,则对练习进行了预期的更改。
我看过有关此问题的先前帖子/回复,但据我所知,我尝试了建议的解决方案但无济于事。
这是负责呈现 FlatList 的组件:
function Exercises({ fetchExercises }) {
const dispatch = useDispatch()
const exercises = useSelector(state => state.exercises) // **passed to data prop**
useEffect(() => {
dispatch(fetchExercises())
}, [dispatch])
<FlatList
data={exercises}
keyExtractor={item => item.id.toString()}
renderItem={({ item }) => {
return <ExerciseListItem item={item} />
}}
/>
下面是我在 useEffect 中分派的操作:
export const editExercise = (id, changes) => dispatch => {
dispatch({ type: EXERCISE_START })
axios.put(<endpoint>, { name: changes })
.then(res => {
dispatch({ type: EDIT_EXERCISE_SUCCESS, payload: res.data })
.catch(err => {
dispatch({ type: EDIT_EXERCISE_FAIL, payload: err })
}
}
...这是我的减速器:
const initialState = {
exercises: [],
}
const exercisesReducer = (state = initialState, action) => {
switch (action.type) {
case EDIT_EXERCISE:
return {
...state,
isLoading: false,
exercises: state.exercises.map(exercise=> {
exercise.id === action.payload.id ? action.payload : exercise
}
}
}
}
无论如何,我能够成功地将新练习 添加 到列表中。不确定这是否会有所不同,但值得一提。此外, 这里 有一个类似的问题,大约一年前有人问过这个问题,它似乎是我的问题的解决方案,但我仍然没有得到预期的结果。
如能得到任何帮助,我将不胜感激!
1个回答
我认为问题在于您没有在
map
中返回任何内容,这导致了此错误。
exercises: state.exercises.map(exercise=> {
return exercise.id === action.payload.id ? action.payload : exercise
}
Matt Aft
2020-11-27