反应

时间:2018-01-31 14:58:56

标签: javascript reactjs

我有一个react函数从axios返回一个promise,我需要编码一个方程式字符串传递给它。

const { equation } = this.state;
axios.post(`${this.state.rootUrl}/integrate`, { equation }).then(some other code)

我希望在将字符串方程传递给用于查询的API之前对其进行编码。

我尝试了以下但是它没有用。

axios.post(`${this.state.rootUrl}/integrate`, { encodeURIComponent(equation) })

我也试过这个:

const { equation } = this.state;
const { test } = encodeURIComponent(equation);
axios.post(`${this.state.rootUrl}/integrate`, { test }).then(some other code)

这也没有用。

这是我尝试使用此功能的完整代码:

handleSubmit = (e) => {
    e.preventDefault();
    const { equation } = this.state;
    // const { test } = encodeURIComponent(equation);
    axios.post(`${this.state.rootUrl}/integrate`, { equation })
      .then((response) => {
        const data = response.data;
        this.setState({ data: data });
        console.log(equation);
        if (data != null) {
          this.setState({input: data.response[0]});
        }
    }
  }

2 个答案:

答案 0 :(得分:3)

在原始示例中,您使用简写语法设置对象属性 - 以下两行代码是等效的:

 public IActionResult getJourneyCalculation([FromBody] IList<FromLocation> locations)

你的第二个例子不做同样的事情!在示例二中,您尝试使用方法调用的速记,这不会起作用。在示例三中,您尝试对{ equation } { equation: equation } 的返回值进行解构,无法工作(它返回一个字符串)。

Fawaz的第一个例子几乎可以运作,但行为有细微差别 - 因为他们已经将变量命名为encodeURIComponent(equation),传递给Axios的对象的关键将会< em>也是test。请记住,这些是等价的:

test

据推测,您的API期待的是{ test } { test: test } 而不是equation,所以这不会起作用。

要获得正确的行为,您应确保您传递的对象具有正确的密钥:

test

答案 1 :(得分:1)

使用速记似乎存在问题。试试这样:

const test = encodeURIComponent(equation); // no braces here
axios.post(`${this.state.rootUrl}/integrate`, { test }).then(some other code)

axios.post(`${this.state.rootUrl}/integrate`, { test: encodeURIComponent(equation) })