【问题标题】:Error: Identifier already been declared. How can it be resolved?错误:标识符已被声明。如何解决?
【发布时间】:2021-07-25 23:30:50
【问题描述】:

我正在使用 Grapgql 在 React 应用程序中进行查询。我有一个查询和突变,都在同一个组件中。因此,定义的变量error & data会重复。因此,它在 React 中显示错误,因为 Identifiers already declared

下面是组件的代码:

function DisplayUsers() {
  let { id } = useParams();
  const { loading, error, data } = useQuery(LOAD_USERS_BY_ID, {
    variables: { id: parseInt(id) },
  });

  const [deleteUserById, { error, data }] = useMutation(DELETE_USER);

  const deleteUser = () => {
    deleteUserById({ variables: { id: id } });
  };

  useEffect(() => {
    if (data) {
      console.log(data);
      alert('Successful deletion');
      setTimeout(() => {
        <Redirect
          to={{
            pathname: '/view-users',
          }}
        />;
      }, 3000);
    }
  }, [data]);

  console.log(typeof id);
  console.log(data);
  if (loading) return <h4>Loading data...</h4>;
  return (
    data && (
      <div className='row'>
        <div className='col s12 m6 offset-m3' style={{ marginTop: '50px' }}>
          <div className='card'>
            <div className='card-content'>
              <span className='card-title'>
                {data.getUsersById.firstName} {data.getUsersById.lastName}
              </span>
              <p>Registerd Email: {data.getUsersById.email}</p>
              <p>Registerd Password: {data.getUsersById.password}</p>
              <p>User Id : {data.getUsersById.id}</p>
              <br />
              <div className='card-action'>
                <button
                  onClick={deleteUser}
                  className='waves-effect waves-light btn-small right'
                >
                  Delete
                </button>
              </div>
            </div>
          </div>
        </div>
      </div>
    )
  );
}

如何克服?

【问题讨论】:

  • google for js destructuring with alias ... &lt;Redirect /&gt; 必须在“主”FC 主体中呈现/返回,而不是在事件处理程序中 ... react 是数据驱动的,然后是 useState 并更改事件处理程序中的一些标志

标签: reactjs graphql apollo-client react-apollo graphql-mutation


【解决方案1】:

你可以像这样提供不同的名字

const { loading, error: userError, data: userData } = useQuery(LOAD_USERS_BY_ID, {
    variables: { id: parseInt(id) },
});

然后在其余代码中使用新名称

const userQuery = useQuery(LOAD_USERS_BY_ID, {
    variables: { id: parseInt(id) },
});

然后在其余代码中使用userQuery.data

【讨论】:

  • 谢谢。我对此完全陌生。这很有帮助
猜你喜欢
  • 2020-07-20
  • 2019-10-26
  • 1970-01-01
  • 2021-01-16
  • 2019-04-09
  • 1970-01-01
  • 1970-01-01
  • 2022-01-04
  • 1970-01-01
相关资源
最近更新 更多