【发布时间】:2020-11-15 19:04:09
【问题描述】:
我有一个用例,我在 UI 中显示与用户关联的所有待办事项列表。有一个切换按钮,切换它,仅显示同一用户的 completed 待办事项列表。我正在调用 react hook useQuery 但 有条件 基于切换按钮状态。下面是代码:
import TodoItems from './TodoItems';
import { LIST_TODOS_BY_USERNAME, LIST_TODOS_BY_STATUS } from '../graphql/queries';
import { useQuery } from '@apollo/react-hooks';
type TodoListProps = {
username: string;
showCompleted: boolean;
};
const TodoList:FC<TodoListProps> = ({ username, showCompleted }) => {
const { loading, error, data } = !showCompleted
? useQuery(LIST_TODOS_BY_USERNAME, { variables: { username }, pollInterval: 500 })
: useQuery(LIST_TODOS_BY_STATUS, { variables: { username, status: 'COMPLETED' }, pollInterval: 500 });
if (error) {
return (
<div>
<p>{`Error! ${error}`}</p>
</div>
);
}
return (
<div className="todoapp">
<div>
<header className="header">
<div className="imagetool">
<img
alt={username}
src={`https://something.com/?uid=${username}`}
/>
</div>
<H1>
{username}
’s todos
</H1>
<div className="todo-list-container">
<Row gridGap={32} justifyContent="center" padding={8}>
<View>
{loading ? (
<Col alignItems="start" gridGap={16}>
<Spinner size={SpinnerSize.Small} />
</Col>
) : (
<TodoItems todoListItems={!showCompleted ? data.getTodosByUserName : data.getTodosByStatus} />
)}
</View>
</Row>
</div>
</header>
</div>
</div>
);
};
export default TodoList;
然而,这很好用,但在构建过程中,由于 linting 开始发挥作用,它失败并出现错误:
17:7 错误 React Hook "useQuery" 被有条件地调用。 React Hooks 必须在每个组件渲染中以完全相同的顺序调用 react-hooks/rules-of-hooks
如何在不禁用 lint 规则的情况下解决问题?
任何指针表示赞赏!
【问题讨论】:
标签: javascript reactjs graphql react-hooks