简体   繁体   English

React JSX:设置变量导致页面未加载

[英]React JSX: setting variable leads to page not being loaded

I have a question regarding setting a specific variable based on another.我有一个关于基于另一个变量设置特定变量的问题。 I have stored the gender of the user in the database as U, M, F.我已将用户的性别存储在数据库中为 U、M、F。

U stands for Undefined, M for Male, F for Female etc. U代表未定义,M代表男性,F代表女性等。

now I want to show the text Undefined instead of U and Male instead of M.现在我想显示文本 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>
  );
};

However once I add this part, the page stops working.但是,一旦我添加了这部分,页面就会停止工作。

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

This doesn't produce any errors I can see however the page remains blank, doesn't get loaded when this part is added.这不会产生任何我可以看到的错误,但是页面保持空白,添加此部分时不会加载。 I didn't even get to using the set variable.我什至没有使用 set 变量。 Does anyone have an idea on why this happens?有谁知道为什么会发生这种情况?

Otherwise, when this part is removed, the code works fine and 'U' is printed in the gender field.否则,当这部分被删除时,代码可以正常工作,并且“U”会打印在性别字段中。

(React, and front-end in general are new to me ) (反应,一般的前端对我来说都是新的)

Thanks in advance.提前致谢。

One issue I can see is data can be undefined.我可以看到的一个问题是数据可以是未定义的。 So you need to check before picking out gender from data.因此,您需要在从数据中选择性别之前进行检查。

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

Also instead of assigning it into a separate variable, you can use a map to store the name mappings and define a function to get user's gender from user object.此外,您可以使用 map 来存储名称映射并定义 function 以从用户 object 获取用户的性别,而不是将其分配给单独的变量,而不是将其分配给单独的变量。

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

And use it like并像使用它一样

...
<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);
    }}
...

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM