开发者问题收集

在 React 应用程序中的函数调用中使用 Axios post 时不会返回数据

2020-07-01
2082

我在我的 React 应用程序中使用 axios 发布请求。发布请求工作正常,我在控制台日志中获取响应数据。但我想返回该数据以在网页中呈现。任何帮助都非常感谢。谢谢。 这是我发出 axios 请求的函数。

function _toRoomName(title) {
const axios = require('axios');
axios({
              method: "POST", 
              url:"hashroomname.php",
              data: {
                roomname: title 
             }
           }).then((response) => {
                console.log(response.data);
                return response.data;
          }).catch((error) => { 
              return error;
           });
}

这是我的渲染方法,需要渲染返回的响应。

<Text className = 'titled'>
    { _toRoomName(title) } //I want result here
 </Text>
2个回答

您在函数调用中缺少 return - 您是从 then 内部返回的,而不是从外部承诺返回的

function _toRoomName(title) {
    return axios({
              method: "POST", 
              url:"hashroomname.php",
              data: {
                roomname: title 
             }
           }).then((response) => {
                console.log(response.data);
                return response.data;
          }).catch((error) => { 
              return error;
           });
}

这实际上不起作用。您无法将承诺嵌入 <Text> 中,您需要将其提升到外部状态

例如

const [ data, setData ] = useState(null)

useEffect(() => {
   _toRoomName(title)
     .then(response => {
       setData(response)
     })
}, [])

return (
  <Text className = 'titled'>
    {data}
  </Text>
)

现在 data 将为空,直到加载为止,并且 <Text> 将为空,直到它有数据为止

Ross Mackay
2020-07-01

解决方案是:1)使您的函数异步。

async function _toRoomName(title) {
          const axios = require('axios');
            axios({
                  method: "POST", 
                  url:"hashroomname.php",
                  data: {
                    roomname: title 
                 }
               }).then((response) => {
                    console.log(response.data);
                    return response.data;
              }).catch((error) => { 
                  return error;
               });
    }

2)将您的函数移动到 componentDidMount() 并将结果存储在 state 中。在 render 方法中使用该状态。

componentDidMount() {
const axios = require('axios');
axios({
              method: "POST", 
              url:"hashroomname.php",
              data: {
                roomname: title 
             }
           }).then((response) => {
                this.setState({state:response.data})
                
          }).catch((error) => { 
              return error;
           });
}
Kalpana R
2020-07-05