reactjs - 两个组件使用相同的组件

标签 reactjs react-redux react-hooks

我试图避免项目中的代码重复,因此我决定创建一个其他两个组件可以使用的组件,但它似乎不起作用。它与钩子(Hook)的使用(useEffect)有什么关系还是根本不重要? 这是代码:

可重用组件:Posts.js

import React, { useEffect } from "react";
import { useDispatch, useSelector } from "react-redux";
import { makeStyles } from "@material-ui/core/styles";
import CircularProgress from "@material-ui/core/CircularProgress";
import ErrorPage from "../../pages/ErrorPage";
import Post from "./Post";

const useStyles = makeStyles({
  root: {
    margin: "5em",
    textAlign: "center",
  },
  loading: {
    margin: "0 auto",
    marginTop: "50px",
  },
});

export const Posts = ({ action, postsType }) => {
  const classes = useStyles();
  const dispatch = useDispatch();
  const { token } = useSelector((state) => state.auth);

  useEffect(() => {
    dispatch(action(token));
  }, []);

  const { posts, loading, fetched, error } = useSelector(
    (state) => state.posts[postsType]
  );

  return (
    <div className={classes.root}>
      {loading && (
        <CircularProgress
          className={classes.loading}
          size="200px"
          thickness="1"
        />
      )}
      {fetched && posts.map((post) => <Post postData={post} />)}
      {error && <ErrorPage />}
    </div>
  );
};

使用 Posts.js 的组件:

import React from "react";
import { fetchAllPostsByUserId } from "../redux/actions/postsActions";
import { Posts } from "../components/sharedComponents/Posts";

const UserPostsPage = () => (
  <Posts action={fetchAllPostsByUserId} postsType="userPosts" />
);

export default UserPostsPage;

import React from "react";
import { fetchRecommendedPosts } from "../redux/actions/postsActions";
import { Posts } from "../components/sharedComponents/Posts";

const RecommendedUserPostsPage = () => (
  <Posts action={fetchRecommendedPosts} postsType="recommendedPosts" />
);
export default RecommendedUserPostsPage;

这是 redux 存储状态:

const initialState = {
  isPostCreated: false,
  mainPosts: {
    posts: [],
    loading: false,
    fetched: false,
    error: false,
  },
  userPosts: {
    posts: [],
    loading: false,
    fetched: false,
    error: false,
  },
  recommendedPosts: {
    posts: [],
    loading: false,
    fetched: false,
    error: false,
  },
  trendingPosts: {
    posts: [],
    loading: false,
    fetched: false,
    error: false,
  },
};
``

最佳答案

您的选择器检索到错误的结果,这就是为什么我问您这些属性是否填写正确。 这应该有效:

  const { posts, loading, fetched, error } = useSelector(
    (state) => state[postsType]
  );

关于reactjs - 两个组件使用相同的组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62830958/

相关文章:

javascript - ReactJS - 完全相同的元素在 chrome 浏览器中放大/缩小时表现不同

javascript - React 无法从不同组件的函数体内更新组件

javascript - 在 React 中使用高阶组件来格式化子组件

reactjs - 如何在一个状态内合并多个 reducer ?

javascript - React 私有(private)路由不渲染登录组件

javascript - 使用钩子(Hook)在 React 组件的多次调用之间共享可变状态

javascript - 使用 react context api 从辅助函数显示加载器

javascript - react 钩子(Hook) : handle multiple inputs

javascript - 组件不在 native react 中呈现

Redux 表单 - 如何将字段设置为触摸