如何对 FlatList 中的 Array 数据进行排序?
How to sort Array data in FlatList?
我将数据放入 useState
以便每当数据更改时,UI 也会更改。
const [state, setState] = useState();
有了这个数据,我运行 FlatList
。 (参见 data
部分)
<FlatList
ref={flatListRef}
contentContainerStyle={{
paddingBottom: 20,
}}
keyboardDismissMode={true}
showsVerticalScrollIndicator={false}
data={state}
keyExtractor={(comment) => "" + comment.id}
renderItem={renderComment}
/>
我想按日期 createdAt
对这些数据进行排序。
我在 state
中的数据是由 object
组成的 Array
。
Array [
Object {
"__typename": "Comment",
"createdAt": "1645612616365",
"id": 434,
"isMine": true,
"payload": "가",
"user": Object {
"__typename": "User",
"avatar": "https://chungchunonuploads.s3.amazonaws.com/avatars/1-1642681327283-%E1%84%80%E1%85%B5%E1%86%B7%E1%84%86%E1%85%B5%E1%84%89%E1%85%AE%E1%86%A8.jpeg",
"username": "김미숙",
},
},
Object {
"__typename": "Comment",
"createdAt": "1645589527805",
"id": 431,
"isMine": true,
"payload": "음",
"user": Object {
"__typename": "User",
"avatar": "https://chungchunonuploads.s3.amazonaws.com/avatars/1-1642681327283-%E1%84%80%E1%85%B5%E1%86%B7%E1%84%86%E1%85%B5%E1%84%89%E1%85%AE%E1%86%A8.jpeg",
"username": "김미숙",
},
},
]
我在搜索数组排序的方法时,建议我使用sort
。
所以我做了如下功能。
const sortedState = state.sort(function (a, b) {
parseInt(a.createdAt) - parseInt(b.createdAt) > 0;
});
我的计划是把这个 sortedSate
放在 FlatList 中。
<FlatList
data={sortedState}
/>
但是,我遇到了两条错误消息。
1) 尝试分配只读 属性.
可能是因为 state
是用 const
声明的。
所以我无法对其进行排序(更改)..
2) undefined 不是一个对象(计算'state.sort')
不知道为什么,好像不能用sort
方法。
请帮帮我。
+ 当我调用 setState
.
当 UI 首先安装时。
useEffect(() => {
setState(updatePhoto?.seePhoto?.comments);
register("comments", {
required: true,
});
}, [state, updatePhoto, register]);
当我编辑评论时。
const updateEditComment = (cache, result) => {
const {
data: {
editComment: { error, ok, id },
},
} = result;
if (ok) {
refetch();
setState(updatePhoto);
textRef.current.clear();
}
};
const onEditValid = async ({ comments }) => {
const commentId = await AsyncStorage.getItem("@commentId");
await editCommentMutation({
variables: {
id: parseInt(commentId),
payload: comments,
},
update: updateEditComment,
});
};
您可以在将数据呈现在 FlatList 中之前对其进行排序。
我已将您的排序功能重构为
const getSortedState = (data) => data.sort((a, b) => parseInt(a.createdAt) - parseInt(b.createdAt));
const sortedItems = useMemo(() => {
if(state) {
return getSortedState(state);
}
return state;
}, [state]);
<FlatList
data={sortedItems}
/>
例子Snack.
我将数据放入 useState
以便每当数据更改时,UI 也会更改。
const [state, setState] = useState();
有了这个数据,我运行 FlatList
。 (参见 data
部分)
<FlatList
ref={flatListRef}
contentContainerStyle={{
paddingBottom: 20,
}}
keyboardDismissMode={true}
showsVerticalScrollIndicator={false}
data={state}
keyExtractor={(comment) => "" + comment.id}
renderItem={renderComment}
/>
我想按日期 createdAt
对这些数据进行排序。
我在 state
中的数据是由 object
组成的 Array
。
Array [
Object {
"__typename": "Comment",
"createdAt": "1645612616365",
"id": 434,
"isMine": true,
"payload": "가",
"user": Object {
"__typename": "User",
"avatar": "https://chungchunonuploads.s3.amazonaws.com/avatars/1-1642681327283-%E1%84%80%E1%85%B5%E1%86%B7%E1%84%86%E1%85%B5%E1%84%89%E1%85%AE%E1%86%A8.jpeg",
"username": "김미숙",
},
},
Object {
"__typename": "Comment",
"createdAt": "1645589527805",
"id": 431,
"isMine": true,
"payload": "음",
"user": Object {
"__typename": "User",
"avatar": "https://chungchunonuploads.s3.amazonaws.com/avatars/1-1642681327283-%E1%84%80%E1%85%B5%E1%86%B7%E1%84%86%E1%85%B5%E1%84%89%E1%85%AE%E1%86%A8.jpeg",
"username": "김미숙",
},
},
]
我在搜索数组排序的方法时,建议我使用sort
。
所以我做了如下功能。
const sortedState = state.sort(function (a, b) {
parseInt(a.createdAt) - parseInt(b.createdAt) > 0;
});
我的计划是把这个 sortedSate
放在 FlatList 中。
<FlatList
data={sortedState}
/>
但是,我遇到了两条错误消息。
1) 尝试分配只读 属性.
可能是因为 state
是用 const
声明的。
所以我无法对其进行排序(更改)..
2) undefined 不是一个对象(计算'state.sort')
不知道为什么,好像不能用sort
方法。
请帮帮我。
+ 当我调用 setState
.
当 UI 首先安装时。
useEffect(() => {
setState(updatePhoto?.seePhoto?.comments);
register("comments", {
required: true,
});
}, [state, updatePhoto, register]);
当我编辑评论时。
const updateEditComment = (cache, result) => {
const {
data: {
editComment: { error, ok, id },
},
} = result;
if (ok) {
refetch();
setState(updatePhoto);
textRef.current.clear();
}
};
const onEditValid = async ({ comments }) => {
const commentId = await AsyncStorage.getItem("@commentId");
await editCommentMutation({
variables: {
id: parseInt(commentId),
payload: comments,
},
update: updateEditComment,
});
};
您可以在将数据呈现在 FlatList 中之前对其进行排序。
我已将您的排序功能重构为
const getSortedState = (data) => data.sort((a, b) => parseInt(a.createdAt) - parseInt(b.createdAt));
const sortedItems = useMemo(() => {
if(state) {
return getSortedState(state);
}
return state;
}, [state]);
<FlatList
data={sortedItems}
/>
例子Snack.