javascript - axios请求后如何显示item名称

标签 javascript node.js reactjs axios

我尝试在通过 axios 请求获取项目名称后显示它(这里的项目是一种成分)。我不明白我需要做什么才能使用“返回”项目名称。

Axios 毫无问题地返回了项目的名称,所以我尝试用 return <p>{response.data.name}</p> 来显示它但什么也没有显示。

我刚收到这条消息:“预期在箭头函数中返回一个值”

ListIng 被调用 (props.recipe.ing_list = ["whateverid", "whateverid"]) :

<td><ListIng list={props.recipe.ing_list} /></td>

我试着用这个来显示项目的名称:

    const ListIng = props => (
        props.list.map((item) => {
            axios.get('http://localhost:4000/ingredient/' + item)
            .then(response => {
                return <p>{response.data.name}</p>
            })
            .catch(function (error) {
                console.log(error)
            })
        })
    )

这是我的第一篇文章,所以如果有任何我可以改进的地方,请不要犹豫告诉我 ;-)

最佳答案

您正在从 .then 回调函数返回值。返回值将传递给嵌套 .then(如果有),但不会用作功能组件的返回值。

当你使用异步调用时,你应该使用状态,让 React 知道数据已经准备好,应该重新渲染组件。您可以使用 React Hooks 来实现这一点,如下所示(未测试,用作提示)

const ListIng = props => {
    const [data, setData] = useState([]);  // Initial data will be empty array
    props.list.map((item) => {
        axios.get('http://localhost:4000/ingredient/' + item)
        .then(response => {
            setData(e => ([...e, response.data.name]));  // On each response - populate array with new data
        })
        .catch(function (error) {
            console.log(error)
        })
    })
    // Display resulting array as data comes
    return <div>{data.map(d => ({<p>{d}</p>}))}</div>
}

关于javascript - axios请求后如何显示item名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57192660/

相关文章:

javascript - HTML5 Canvas 初学者,使用图层吗?

node.js - 关系多的Bookshelf如何查询数据?

javascript - $http.post 在控制台中返回错误未定义

javascript - 在 nodejs 服务器和 react web 客户端之间共享 javascript 类

reactjs - react 钩子(Hook)重复 react 包

javascript - RxJS 和 React 的 setState - 延迟函数执行直到订阅

每个 JavaScript JSON 仅返回第一个对象字符串

javascript - 在 1 行中设置多个变量在 javascript 中有效吗? (var x=y ='value' ;)

javascript - Breeze js : Where do I set AutoGeneratedKeyType

reactjs - React 中的交互式图像