【问题标题】:Trying to send params to axios in get - react尝试在 get - react 中将参数发送到 axios
【发布时间】:2021-02-24 14:38:24
【问题描述】:

我是网站的新手,也是 React 的新手。 我构建了一个在 nodejs 中运行良好的函数。在极少数情况下,我想根据我发送给它的参数运行这个函数,所以我尝试向它发送参数,但我认为我不能,我尝试打印它 - 我没有得到打印我要发送的参数。

我运行函数 throw click at button in react:

 <Button onClick={() => {
        const result = [1,2,3,4,5,"test"];
        props.makeMatchVer2(result);
      }}>
        make match ver2
                    </Button>

我在 axios 中运行的动作:

export const makeMatchVer2 = (data) => (dispatch) => {
  dispatch({ type: LOADING_DATA });
  axios
    .get('/kmeans', {
      params: {
        filterArray: data
      }
    })
    .then((res) => {
      dispatch({
        type: MAKE_MATCH,
        payload: res.data
      });
    })
    .catch((err) => {
      dispatch({
        type: MAKE_MATCH,
        payload: []
      });
    });
};

我在 nodeJS 中构建的功能:

exports.addUserKmeansMatch = (req, res) => {
  
  console.log("addUserKmeansMatch function start:");
  console.log(req.data);
  if(req.params)
  {
    console.log(req.params);
  }
  let userIndex = 0;
  let engineers = [];
  let engineersHandles = [];
  let engineerDetailsNumeric = {};

  db.collection("preferences").get().then(querySnapshot => {
    querySnapshot.forEach(doc => {
      const engineerDetails = doc.data();

      if (engineerDetails.handle === req.user.handle) {
        engineersHandles.unshift(engineerDetails.handle);
        delete engineerDetails.handle;
        engineerDetailsNumeric = convertObjectWithStrToNumber(engineerDetails);
        engineers.unshift(engineerDetailsNumeric);
      }
      else {
        engineersHandles.push(engineerDetails.handle);
        delete engineerDetails.handle;
        engineerDetailsNumeric = convertObjectWithStrToNumber(engineerDetails);
        engineers.push(engineerDetailsNumeric);
      }
    });

    kmeans.clusterize(engineers, { k: 4, maxIterations: 5, debug: true }, (err, result) => {
      if (err) {
        console.error(err);
        return res.status(500).json({ error: err.code });
      } else {
        const cluster = result.clusters;

        let foundedMatches = GetUserSerialGroup(userIndex, [...cluster], [...engineers]);
        let foundedMatchesHandle = GetUserSerialGroupHandle(userIndex, [...cluster], [...engineersHandles]);

        let totalTest = {
          foundedMatches: foundedMatches,
          foundedMatchesHandle: foundedMatchesHandle,
          cluster: cluster,
          engineersHandles: engineersHandles,
          engineers: engineers
        };
        let userMatchHandle = reduceUserMatchHandle(foundedMatchesHandle);
        userMatchHandle.handle = req.user.handle;

        db.doc(`/match/${req.user.handle}`)
          .set(userMatchHandle)
          .then(() => {
            return res.json({ message: "Details added successfully" });
          })
          .catch((err) => {
            console.error(err);
            return res.status(500).json({ error: err.code });
          });
      }
    })
  })


};

通过按钮,我向函数发送参数,但我看不到它们的打印,可能有些东西不起作用,但我不知道为什么,我是新手

【问题讨论】:

  • 看起来makeMatchVer2是一个返回函数的函数(可能是redux thunk?),所以调用makeMatchVer2([1, 2, 3, 4, 5, "test"])不会进行任何axios调用。
  • 感谢帮助,我用的是redux-thunk。我想我在firebase中看不到nodeJS的打印,我不明白为什么但是。

标签: javascript node.js reactjs express axios


【解决方案1】:

makeMatchVer2 是一个 thunk。您应该使用 dispatch 调用它:dispatch(props.makeMatchVer2(result))

【讨论】:

  • 感谢您的帮助,我试图添加调度,但它给我一个错误:'dispatch' is not defined no-undef
【解决方案2】:

代码是正确的,我不小心发送了错误的对象,我有 2 个名称几乎相同的对象,一个数组,另一个是对象。我不小心发送了对象而不是数组,它现在可以工作了,谢谢。

【讨论】:

    猜你喜欢
    • 2020-08-24
    • 2021-11-16
    • 1970-01-01
    • 2022-01-05
    • 2022-01-22
    • 2014-12-08
    • 2021-07-21
    • 1970-01-01
    • 2020-07-02
    相关资源
    最近更新 更多