无法在 React Native FlatList 中计算 item.id
Unable to evaluate item.id in React Native FlatList
我正在尝试使用 React Native 的 FlatList 组件呈现练习列表,但我目前无法成功编辑练习名称。一切都在初始渲染时顺利运行。但是,当我尝试编辑练习时,随后重新渲染 returns 错误 undefined is not an object (evaluating 'item.id')
。如果我检查我的本地数据库,数据已成功编辑,但将其呈现到屏幕是另一个问题。但是,如果我要关闭错误显示并重新加载应用程序,则练习会发生预期的更改。
我以前 posts/responses 见过这个问题,但据我所知,我已经尝试了建议的解决方案,但无济于事。
这里是负责渲染 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
}
}
}
}
无论如何,我能够成功地添加 一个新练习到列表中。不确定这是否会有所作为,但值得一提。另外,here 是大约一年前有人问过的一个类似问题,似乎可以解决我的问题,但我仍然没有得到预期的结果。
如有任何帮助,我们将不胜感激!
我认为问题在于您没有在 map
中返回任何导致此错误的内容。
exercises: state.exercises.map(exercise=> {
return exercise.id === action.payload.id ? action.payload : exercise
}
我正在尝试使用 React Native 的 FlatList 组件呈现练习列表,但我目前无法成功编辑练习名称。一切都在初始渲染时顺利运行。但是,当我尝试编辑练习时,随后重新渲染 returns 错误 undefined is not an object (evaluating 'item.id')
。如果我检查我的本地数据库,数据已成功编辑,但将其呈现到屏幕是另一个问题。但是,如果我要关闭错误显示并重新加载应用程序,则练习会发生预期的更改。
我以前 posts/responses 见过这个问题,但据我所知,我已经尝试了建议的解决方案,但无济于事。
这里是负责渲染 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
}
}
}
}
无论如何,我能够成功地添加 一个新练习到列表中。不确定这是否会有所作为,但值得一提。另外,here 是大约一年前有人问过的一个类似问题,似乎可以解决我的问题,但我仍然没有得到预期的结果。
如有任何帮助,我们将不胜感激!
我认为问题在于您没有在 map
中返回任何导致此错误的内容。
exercises: state.exercises.map(exercise=> {
return exercise.id === action.payload.id ? action.payload : exercise
}