【问题标题】:React JSX: setting variable leads to page not being loadedReact JSX:设置变量导致页面未加载
【发布时间】:2020-11-13 11:02:34
【问题描述】:

我有一个关于基于另一个变量设置特定变量的问题。 我已将用户的性别存储在数据库中为 U、M、F。

U 代表未定义,M 代表男性,F 代表女性等。

现在我想显示文本 Undefined 而不是 U 和 Male 而不是 M。

export const AccountTile: React.FC = () => {
  const [isEditing, setIsEditing] = React.useState(false);
  const [setAccountUpdate, { data, error }] = useAccountUpdate();
  const { data: user } = useUserDetails();
  
  let userGender = user.gender;
  if(userGender === "U"){
    userGender = "Undefined";
  }
  
  React.useEffect(() => {
    if (data && !error) {
      setIsEditing(false);
    }
  }, [data, error]);
  return (
    <S.TileWrapper>
      <Tile>
        <S.Wrapper>
          <S.Header>MY DATA</S.Header>
          <S.Content>
            <S.HeaderSmall>
              Personal details
              {!isEditing && (
                <IconButton
                  name="edit"
                  size={22}
                  onClick={() => setIsEditing(isEditing => !isEditing)}
                />
              )}
            </S.HeaderSmall>
            {isEditing ? (
              <AccountUpdateForm
                initialValues={{
                    birthday: (user && user.birthday) || "",
                  firstName: (user && user.firstName) || "",
                  gender: (user && user.gender) || "",
                  lastName: (user && user.lastName) || "",
                  
                }}
                handleSubmit={data => {
                  setAccountUpdate({ input: data });
                }}
                hide={() => {
                  setIsEditing(false);
                }}
              />
            ) : (
              <S.ContentOneLine>
                <Attribute
                  description="First Name"
                  attributeValue={(user && user.firstName) || "-"}
                />
                <Attribute
                  description="Last Name"
                  attributeValue={(user && user.lastName) || "-"}
                />
                <Attribute
                  description="Birthday"
                  attributeValue={(user && user.birthday) || "-"}
                />
                <Attribute
                  description="Gender"
                  attributeValue={(user && user.gender) || "-"}
                />
              </S.ContentOneLine>
            )}
          </S.Content>
        </S.Wrapper>
      </Tile>
    </S.TileWrapper>
  );
};

但是,一旦我添加了这部分,页面就会停止工作。

let userGender = user.gender;
  if(userGender === "U"){
    userGender = "Undefined";
  }

这不会产生任何我可以看到的错误,但是页面保持空白,添加此部分时不会加载。我什至没有使用 set 变量。有人知道为什么会这样吗?

否则,当这部分被删除时,代码可以正常工作,并且在性别字段中打印“U”。

(React 和前端对我来说一般都是新的)

提前致谢。

【问题讨论】:

  • 你在哪里添加代码块?

标签: javascript python django reactjs


【解决方案1】:

我可以看到的一个问题是数据可以是未定义的。因此,您需要在从数据中挑选性别之前进行检查。

let userGender = user && user.gender;
  if(userGender === "U"){
    userGender = "Undefined";
}

除了将其分配给单独的变量之外,您还可以使用映射来存储名称映射并定义一个函数来从用户对象中获取用户的性别。

const getGender = (user) => {
    const nameMap = {
        U: 'Undefined',
        M: 'Male',
        F: 'Female'
    };
    return nameMap[user?.gender] || "";
}

并像使用它

...
<AccountUpdateForm
    initialValues={{
        birthday: (user && user.birthday) || "",
    firstName: (user && user.firstName) || "",
    gender: getGender(user),
    lastName: (user && user.lastName) || "",
    
    }}
    handleSubmit={data => {
    setAccountUpdate({ input: data });
    }}
    hide={() => {
    setIsEditing(false);
    }}
...

【讨论】:

  • 是的,这行得通,谢谢!我怀疑这是因为“用户”可能由于弹出但很少出现的日志而未定义。但是我认为这不会导致问题,因为我仅以登录用户身份访问此帐户详细信息页面?
猜你喜欢
  • 1970-01-01
  • 2019-07-13
  • 1970-01-01
  • 1970-01-01
  • 2011-06-05
  • 2020-04-30
  • 2019-04-10
  • 2021-09-23
  • 1970-01-01
相关资源
最近更新 更多