reactjs - 使用加载更多按钮获取更多数据而不会丢失以前的数据
问题描述
我想一次只加载 10 个帖子,当我按下加载更多按钮时,我想在前 10 个帖子的基础上再获得 10 个帖子。截至目前,我得到了我的前 10 个帖子,当我按下加载更多时,我输了我的第一个 10 和第二个 10。我正在使用 redux,所以对我来说有点困惑。我在这里的某个地方读过要concat
在我的减速器中使用,但它仍然不起作用。也许我的语法错误?那个帖子是2017年的。
const [page, setPage] = useState(1);
const dispatch = useDispatch();
const { loading, posts } = useSelector((state) => state.posts);
useEffect(() => {
dispatch(getPosts(page));
}, [dispatch, page]);
return (
<Container className="mt-4" style={{ maxWidth: "600px" }}>
{loading ? (
<Loader />
) : (
<>
{posts.map((post) => (
<Col key={post._id} className="m-2 p-2">
<Post post={post} />
</Col>
))}
<Button onClick={() => setPage(page + 1)}>Load More</Button>
</>
)}
</Container>
);
};
我的减速机
export const postsReducer = (state = { posts: [] }, action) => {
switch (action.type) {
case PC.FETCH_ALL_POSTS_REQUEST:
return { loading: true, posts: [] };
case PC.FETCH_ALL_POSTS_SUCCESS:
return {
loading: false,
posts: state.posts.concat(action.payload),
};
case PC.FETCH_ALL_POSTS_FAIL:
return { loading: false, error: action.payload };
解决方案
我的假设是,在您的getPosts
操作中,您似乎正在调度PC.FETCH_ALL_POSTS_REQUEST
最初将 post 设置为空数组。您可能希望将其更改为只是return { loading: true }
不将 post 设置为[]
. 所以你的减速器看起来像这样
export const postsReducer = (state = { posts: [] }, action) => {
switch (action.type) {
case PC.FETCH_ALL_POSTS_REQUEST:
return { loading: true };
case PC.FETCH_ALL_POSTS_SUCCESS:
return {
loading: false,
posts: [...state.posts, ...action.payload],
};
case PC.FETCH_ALL_POSTS_FAIL:
return { loading: false, error: action.payload };
此外,您可能需要确认 redux 存储在新的 post fetch 上没有被清除可能 d
推荐阅读
- vb.net - VB.net 中的下拉复选框
- python - FileNotFoundError:找不到模块“liblas_c.dll”(或其依赖项之一)。尝试使用带有构造函数语法的完整路径
- r - R Shiny:Vtree 图不使用 Shiny 渲染
- go - wg.Add() 放在哪里
- c# - 为什么在添加 ROWVERSION/TIMESTAMP 时将所有属性的 UPDATE CHECK 设置为“从不”?
- python - 在 python 中使用类函数实现图形。(任务)
- javascript - 如何选择动态javascript dom元素
- mysql - 如何查找医生、律师、教育、餐饮等各个类别的员工总数?
- python - 在 Python 中测试图像过滤器
- java - 通过套接字传输数据的问题