React useEffect 缺少依赖项

时间:2021-06-01 16:29:25

标签: reactjs use-effect

我收到警告,因为我的 useEffect 缺少依赖项,但我不想添加这些依赖项,因为每次更改这些依赖项字段的输入值时都会刷新页面。

我的开始日期和结束日期有两个状态数据:

kubectl exec -it curl-pod -n argo -- curl 10.244.1.169:6060/healthz
ok

默认情况下,我根据日期范围加载我的 useEffect 数据:

const [ startDate, setStartDate ] = useState(moment().subtract(3, 'month').format('YYYY-MM-DD'));
const [ endDate, setEndDate ] = useState(moment().format('YYYY-MM-DD'));

然后,我以我的形式使用它们。目标是根据所选日期范围研究数据库中的数据。

useEffect(() => {
    async function fetchData() {
        setDataArr(await myAPI.get({
            propertyID,
            userID,
            startDate,
            endDate,
        }));
    }
    fetchData();
}, [propertyID, userID]);

我收到警告说 useEffect 依赖项数组中缺少 <Form inline> <FormGroup className="mb-10 mr-sm-10 mb-sm-0" inline> <Label for="startDate" className="mr-sm-10">Start Date:</Label> <DatePicker name="startDate" id="startDate" style={{maxWidth: '110px'}} value={startDate} onChange={(e) => setStartDate(e ? moment(e).format('YYYY-MM-DD') : '')} /> </FormGroup> <FormGroup className="mb-10 mr-sm-10 mb-sm-0" inline> <Label for="endDate" className="mr-sm-10">End Date:</Label> <DatePicker name="endDate" id="endDate" style={{maxWidth: '110px'}} value={endDate} onChange={(e) => setEndDate(e ? moment(e).format('YYYY-MM-DD') : '')} /> </FormGroup> <Button className="btn btn-primary" onClick={search}>Update</Button> </Form> startDate,但是如果我添加它们,则每次更改日期输入之一时都会重新加载组件。< /p>

1 个答案:

答案 0 :(得分:2)

我可能会这样做:

const [ startDate, setStartDate ] = useState(moment().subtract(3, 'month').format('YYYY-MM-DD'));
const [ endDate, setEndDate ] = useState(moment().format('YYYY-MM-DD'));
const [ dateRange, setDateRange ] = useState({startDate, endDate});

<Button
    className="btn btn-primary"
    onClick={() => {
        setDateRange({
            startDate,
            endDate,
        })
    }}
>
    Update
</Button>

useEffect(() => {
    async function fetchData() {
        setDataArr(await myAPI.get({
            propertyID,
            userID,
            ...dateRange
        }));
    }
    fetchData();
}, [propertyID, userID, dateRange]);

现在,您可以在不触发更新的情况下设置 startDateendDate,但是当他们点击搜索更新(因为将在更新 fetchData 时触发 dateRange