typescript 在react中尝试从axios迭代JSON时为空文本

r6vfmomb  于 2023-03-24  发布在  TypeScript
关注(0)|答案(2)|浏览(91)

我有代码:

const Forms = () => {
    const [messageText, setMessageText]: any = useState("");
    useEffect(() => {
        const getPosts = () => {
            axios.post('http://localhost:8080/graphql/', {
                query: `
  {
    getPosts(option: true) {
      id
      message
    }
  }  
  `
            })
                .then((res) => {

                    const andrey = res.data.data.getPosts

                    setMessageText(andrey)

                })
                .catch((error) => {
                    console.error(error)
                })
        };
        getPosts()

    }, [])

    console.log(messageText)

    return (
        <div>
            <div style={{alignItems: "center", justifyContent: "center", textAlign: "center"}}>
                {Object.keys(messageText).map((data: any) => (
                    <Form message={data.message}/>
                    ))}

            </div>
            <Input/>
        </div>

    );
};

export default Forms;

我想用json键文本显示div元素,但div元素是空的。如果我只显示数据,那么页面上显示的是数字而不是文本。请帮助我。这是我的浏览器中出现的内容:

fnatzsnv

fnatzsnv1#

开始,使用Object.keys来Map messageText 是不必要的。从我在您的控制台上看到的来看,它已经是一个数组。同样,您只向Form组件传递消息。您可以像这样传递 messageid

...
{messageText.map((data: any) => (
  <Form {...data} />
))}
...

然后在Form组件中,像这样使用它:

const Form = ({ id, message }) => {
...
}
bkhjykvo

bkhjykvo2#

我的解决方案:

return (
    <div>
        <div style={{alignItems: "center", justifyContent: "center", textAlign: "center"}}>
            {messageText && messageText.map((data: any) => (
                <Form message={data.message}/>
                ))}

        </div>
        <Input/>
    </div>

);

};

相关问题