这是上一个主题的后续问题
How to return json data to a react state?
我的react组件使axios.post
服务器express
。服务器使用web3
对Ethereum
上的交易进行签名。 Ethereum
返回以下json
对象。值得注意的是,json
的返回要花费一些时间(几秒钟到几分钟,具体取决于矿工):
{ blockHash: '0xcd08039bac40e2865886e8f707ce9b901978c339d3abb81516787b0357f53fbd',
blockNumber: 4611028,
...other data...
transactionHash: '0x12c65523743ed169c764553ed2e0fb2af1710bb20a41b390276ffc2d5923c6a9',
transactionIndex: 1 }
这是我用来制作axios.post
并设置状态的代码:
import React from "react";
import PaypalExpressBtn from "react-paypal-express-checkout";
import axios from "axios";
export default class Pay extends React.Component {
constructor(props) {
super(props);
this.state = {
items: {}
};
}
render() {
const onSuccess = payment => {
axios
.post("http://compute.amazonaws.com:3000/", {
value: this.props.value,
fileName: this.props.fileName,
hash: this.props.hash
})
.then(response => console.log(response.data))
.catch(function(error) {
console.log(error);
});
console.log(payment);
};
let env = "sandbox"; // you can set here to 'production' for production
let currency = "USD"; // or you can set this value from your props or state
let total = 3.33; // same as above, this is the total amount (based on
const client = {
sandbox:
"...key...",
production: "YOUR-PRODUCTION-APP-ID"
};
return (
<div>
<PaypalExpressBtn
onSuccess={onSuccess}
/>
</div>
);
}
}
当我console.log({ items: this.state.items})
回来时,我返回了看似无穷无尽的构造函数和道具。
我尝试过
this.setState({ items : items.transactionHash });
和console.log(
{ items: this.state.items.transactionHash})
都不起作用。
我需要做的是set.state
,上面的json中只有transactionHash
,没有其他内容。
非常感谢!
答案 0 :(得分:0)
解构操作员是您的朋友
axios.post(
"http://compute.amazonaws.com:3000/users",
{
value: this.props.value,
fileName: this.props.fileName,
hash: this.props.hash
}
)
.then(res => {
const items = res.data;
const {transactionHash} =items
this.setState({ transactionHash });
});
答案 1 :(得分:0)
axios.post(
"http://compute.amazonaws.com:3000/users",
{
value: this.props.value,
fileName: this.props.fileName,
hash: this.props.hash
}
)
.then(res => {
const items = res.data;
const { transactionHash } = items;
this.setState({
items: {
transactionHash
}
});
});
答案 2 :(得分:0)
您需要找出transactionHash在json对象中的位置。
要查找结构,请首先记录输出并检查控制台。
console.log(res.data)
如果让我们假设它在数据对象下,例如:
"data: {
"transactionHash": "0x12c65523743ed169c764553ed2e0fb2af1710bb20a41b390276ffc2d5923c6a9"
}
这是设置状态的方式:
axios.post(
"http://compute.amazonaws.com:3000/users",
{
value: this.props.value,
fileName: this.props.fileName,
hash: this.props.hash
}
)
.then(res => {
console.log(res.data)
this.setState({ hash: res.data.transactionHash });
});
完成状态将是:
{
items: {},
hash: "0x12c65523743ed169c764553ed2e0fb2af1710bb20a41b390276ffc2d5923c6a9"
}
您当然可以使用解构,但是首先我们需要了解从服务器返回的数据的形状