GraphQl Refetch并不总是在TextField清除值上工作

发布于 2025-02-09 17:19:42 字数 2259 浏览 1 评论 0原文

我正在使用GraphQl查询数据库记录。我用材料图textfield创建了一个过滤器组件,并在更新过滤器值后,用refetch运行查询。

有时在清除值后,查询不会再次调用(例如,在日期字段上)。

这是我的代码:

const newDate = new Date();
const [date, setDate] = useState(newDate);

const { data, loading, error, refetch } = useQuery(GET_ALL, {
        variables: { first: 100, task: task, status: status, week: week, date: date, responsible_entity: responsible, no_incident: no_incident, site: site }, onCompleted: (
        ) => {            setItems(data.getAll)
        }
    });
<TextField
   id="dateFilter"
   type="date"
   defaultValue={dateToString(myDate)}
   variant="outlined"
   className={classes.textField}
   onChange={(e, v) => { setDate(e.target.value); refetch() }}
/>
 <Controller
                        control={control}
                        name="responsible"

                        render={({ field: { onChange, value }, fieldState: { error } }) => (
                            <Autocomplete
                                id="responsible"
                                options={responsiblesList}
                                defaultValue={{ 'DISTINCT': responsible || '' }}
                                getOptionLabel={(option) => option.DISTINCT}
                                style={{ width: 300 }}
                                className={classes.textField}

                                onInputChange={(event, newInputValue, reason) => {
                                    if (reason === 'clear') {
                                        setResponsible(null)
                                        return
                                    } else {
                                        setResponsible(newInputValue)
                                    }
                                }}
                                renderInput={(params) => <TextField {...params}
                                    label="select responsible"
                                    variant="outlined"

                                    defaultValue={responsible}
                                />}
                            />
                        )}
                    />

I am using graphQl to query database records. I created a filter component with materialUi TextField with refetch to run the query after the filter values have been updated.

Sometimes after clearing the values the query is not called once again (e.g. on the date field).

This is my code:

const newDate = new Date();
const [date, setDate] = useState(newDate);

const { data, loading, error, refetch } = useQuery(GET_ALL, {
        variables: { first: 100, task: task, status: status, week: week, date: date, responsible_entity: responsible, no_incident: no_incident, site: site }, onCompleted: (
        ) => {            setItems(data.getAll)
        }
    });
<TextField
   id="dateFilter"
   type="date"
   defaultValue={dateToString(myDate)}
   variant="outlined"
   className={classes.textField}
   onChange={(e, v) => { setDate(e.target.value); refetch() }}
/>
 <Controller
                        control={control}
                        name="responsible"

                        render={({ field: { onChange, value }, fieldState: { error } }) => (
                            <Autocomplete
                                id="responsible"
                                options={responsiblesList}
                                defaultValue={{ 'DISTINCT': responsible || '' }}
                                getOptionLabel={(option) => option.DISTINCT}
                                style={{ width: 300 }}
                                className={classes.textField}

                                onInputChange={(event, newInputValue, reason) => {
                                    if (reason === 'clear') {
                                        setResponsible(null)
                                        return
                                    } else {
                                        setResponsible(newInputValue)
                                    }
                                }}
                                renderInput={(params) => <TextField {...params}
                                    label="select responsible"
                                    variant="outlined"

                                    defaultValue={responsible}
                                />}
                            />
                        )}
                    />

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

抠脚大汉 2025-02-16 17:19:42

实际上,您不需要调用refetch(),因为您的查询使用date 状态。当您调用setDate(e.target.value)时,将使用更新的date召回usequery。在这种情况下,回想refetch()就像做同样的事情两次。删除它,它可能会解决您的问题。

You actually don't need to call refetch(), since your query is using date state. When you call setDate(e.target.value), your component re-renders, and useQuery will be recalled with the updated date. Recalling refetch() in this case is like doing the same thing two times. Remove it, it may resolve your issue.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文