Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/396.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript useEffect常量post请求_Javascript_Node.js_Reactjs_Mongodb - Fatal编程技术网

Javascript useEffect常量post请求

Javascript useEffect常量post请求,javascript,node.js,reactjs,mongodb,Javascript,Node.js,Reactjs,Mongodb,我正在尝试使用MongoDB数据库构建一个简单的待办事项列表web应用程序。我的功能似乎正常工作,但我的useEffect钩子不断向服务器发出无限量的post请求。我不明白为什么会发生这种情况 反应码 useEffect(() => { const payload = { roomkey: roomKey } async function getToDos() { const respo

我正在尝试使用MongoDB数据库构建一个简单的待办事项列表web应用程序。我的功能似乎正常工作,但我的useEffect钩子不断向服务器发出无限量的post请求。我不明白为什么会发生这种情况

反应码

    useEffect(() => {
        const payload = {
            roomkey: roomKey
        }
        async function getToDos() {
            const response = await axios({
                url: 'http://localhost:4000/api/choresdisplay',
                method: 'post',
                data: payload
            })

            setItems(response.data.items)

        }
        getToDos();

    }, [roomKey, items]) // render whenever roomkey changes (page load) or when user
                         // adds/deletes item

    console.log(items)
    function addItem() {
        /*setItems(prevItems => {
            return [...prevItems, inputText];
        });*/

        const payload = {
            item: inputText,
            roomKey: roomKey
        }
        async function addTodo() {
            const response = await axios({
                url: 'http://localhost:4000/api/chores',
                method: 'post',
                data: payload
            })
        }
        addTodo()
        setInputText("");
    }
服务器端

userRouter.post('/chores', function (req, res) {
    const roomkey = req.body.roomKey;
    const newItem = new tdlModel({
        Item: req.body.item,
        roomKey: roomkey
    });
    newItem.save()
})

userRouter.post('/choresdisplay', async function (req, res) {
    const roomkey = req.body.roomkey;
    console.log(roomkey)
    tdlModel.find({ roomKey: roomkey }, await function (err, foundMates) {
        console.log(foundMates)
        if (err) {
            res.send({
                token: USER_LOGIN_FAIL
            })
        } else {
            console.log(foundMates);
            res.send({
                token: USER_LOGIN_SUCCESS,
                items: foundMates,
            })
        }
    })
})

这是因为您告诉
useffect
项更改时重新运行,但随后您在
useffect
本身中更改了它。因此,您正在创建一个无限循环。如果没有依赖项,您的逻辑似乎很好,因此只需将其从列表中删除即可:

    ....
    }, [roomKey])

当您在useEffect中更改一个状态(setItems)并监听同一状态(items)上的更改时,它会导致一个无限循环

您需要在调用周围添加条件或更改依赖项数组