我是 React 新手,我在这段代码中遇到问题:
class Tests extends React.Component {
async getTests() {
var url = "http://127.0.0.1:100/getTestList"
var buttons=[];
const resp = await fetch(url);
const data = await resp.json();
for(let pkg in data){
console.log(pkg);
for (let cls in data[pkg]){
console.log(cls);
for (var i = 0; i < data[pkg][cls].length; i++) {
let m= data[pkg][cls][i];
buttons.push(<button value={cls}>{m}</button>);
}
}
}
return buttons;
}
render(){
return(
<div>
<h4>Using .map()</h4>
{this.getTests()}
</div>
)
}
}//fine classe
// ========================================
ReactDOM.render(
<Tests />,
document.getElementById('root')
);
我从 POST 服务正确获取 JSON 响应,正确迭代 JSON 以获得包含值和文本的按钮数组,但在 Chrome 上出现此错误:
Error: Objects are not valid as a React child (found: [object Promise]). If you meant to render a collection of children, use an array instead. in div (at src/index.js:95) in Tests (at src/index.js:108)
一些提示? 谢谢 问候
最佳答案
对于这种情况,我将使用带有 useState
和 useEffect
的函数组件。在 useEffect
中,您可以从端点获取数据,然后使用 .map()
您可以从使用 useState
实例化的数组中表示按钮.
请参阅以下可能解决该问题的解决方案:
const Tests = () => {
const [buttons, setButtons] = useState([]);
useEffect(() => {
async getTests() {
const url = 'http://127.0.0.1:100/getTestList';
const resp = await fetch(url);
const data = await resp.json();
const fetchedButtons = [];
for (let pkg in data) {
for (let cls in data[pkg]) {
for (var i = 0; i < data[pkg][cls].length; i++) {
let m = data[pkg][cls][i];
fetchedButtons.push(<button value={cls}>{m}</button>);
}
}
}
setButtons(fetchedButtons);
}
getTests();
}, []);
return <div>
<h4>Using.map()</h4>
{/* here mapping the buttons array */}
{
buttons && buttons.map(e => e);
}
</div>
}
希望这会有所帮助!
关于javascript - 迭代 JSON 并在 React 中添加按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60770644/