首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >React-Redux渲染刷新崩溃

React-Redux渲染刷新崩溃
EN

Stack Overflow用户
提问于 2020-06-11 23:25:51
回答 2查看 445关注 0票数 2

我有一个带有Redux的Mern应用程序。我有个问题。配置文件组件在两种情况下崩溃。1)在build版本中刷新页面后。2)直接从地址栏进行Proiles路由。(缩小大小的较短代码)

1)Profiles.js组件通过getProfiles操作方法渲染来自redux状态的所有配置文件。

代码语言:javascript
复制
 return (
    <Fragment>
      {loading ? (
        <Spinner />
      ) : (
        <Fragment>
          <h1 className="large text-primary">Profiles</h1>
          <p className="lead">Üyeleri ve grupları keşfedin</p>
          <div className="form">
            <div className="form-group">
              <input
                type="text"
                placeholder="İsim"
                name="company"
                value={company}
                onChange={(e) => onChange(e)}
              />{" "}
            </div>{" "}
          </div>
          <div
            className=" lead d-flex align-items-center"
            onClick={() => setOpen(!open)}
          >
          </div>
          <div className="profiles">
            {profiles.length > 0 ? (
              profiles.map(
                (profile) =>
                  profile.user._id !== user._id && (
                    <ProfileItem
                      key={profile._id}
                      followUser={followUser}
                      unFollowUser={unFollowUser}
                      profile={profile}
                      user={user}
                    />
                  )
              )
            ) : (
              <h4>No Profile</h4>
            )}
          </div>
        </Fragment>
      )}
    </Fragment>
  );
};

Profiles.js的Redux操作

代码语言:javascript
复制
export const getProfiles = (
  page,
  start,
  graduation,
  mentorship,
  scholarship,
  representative,
  company
) => async (dispatch) => {
   const limit = 10;
  const payload = {
    params: {
      page,
      start,
      limit,
      graduation,
      mentorship,
      scholarship,
      representative,
      company,
    },
  };
  console.log(page);
  console.log(payload);
  try {
    const res = await axios.get("/api/profile", payload);
    console.log(res.data.profiles);
    dispatch({
      type: GET_PROFILES,
      payload: { profiles: res.data.profiles, totalPages: res.data.totalPages },
    });
    console.log(res.data);
  } catch (err) {
    dispatch({
      type: PROFILE_ERROR,
      payload: { msg: err.response.statusText, status: err.response.status },
    });
  }
};

Profiles.js的减速机

代码语言:javascript
复制
  case GET_PROFILES:
  return {
    ...state,
    profiles: payload.profiles,
    totalPage: payload.totalPages,
    loading: false,
  };

当我用React-routers从导航中点击时,它是正常的。但当我刷新或直接从地址栏转到页面时,它在控制台中crashes.And这些错误

Refresh/address bar render crash

页面仅在buid模式下崩溃。在开发模式下很好。我试着改变条件(加载等),但是什么都没有改变。

任何帮助都将不胜感激。谢谢!

EN

回答 2

Stack Overflow用户

发布于 2020-06-12 01:42:59

看起来问题不在于个人资料,而在于用户_id。最初,在第一次呈现配置文件组件时,用户为null,因此您得到的错误_id为null。

尝试检查用户是否存在,然后渲染配置文件。就像在Profile.js中

代码语言:javascript
复制
if(!user){
        return null
        }

        return (
    <Fragment> 
    // yor rest code
    </Fragment>

此外,在使用console.log加载页面后,检查配置文件的用户属性是否显示为空。

票数 0
EN

Stack Overflow用户

发布于 2020-06-12 09:51:48

我不确定,但你可以验证以避免第一个错误,我指的是'_id‘错误:

代码语言:javascript
复制
<div className="profiles">
  { 
    profiles.length > 0 && user ? (
      profiles.map((profile) => {
        if (profile.user && profile.user._id !== user._id) {
          return (
            <ProfileItem
              key={profile._id}
              followUser={followUser}
              unFollowUser={unFollowUser}
              profile={profile}
              user={user}
            />
          );
        }
      })
    ) : (
      <h4>No Profile</h4>
    )
  }
</div>;

statusText错误是因为在profiles.js中的try catch中存在错误,并且当您想要分派PROFILE_ERROR操作时,您试图从err.response.statusText访问statusText,但err.response未定义。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62327844

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档