javascript - 迭代 JSON 并在 React 中添加按钮

标签 javascript reactjs loops

我是 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)

一些提示? 谢谢 问候

最佳答案

对于这种情况,我将使用带有 useStateuseEffect 的函数组件。在 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/

相关文章:

c - fgets 的循环退出条件不起作用

javascript - 只要求用户正确答案 5 次的简单 JavaScript 函数?

javascript - jquery ajax json的字符编码

Javascript es6 - 它是重新分配还是参数?

javascript - 基于 prop 加载 css/javascript 文件

reactjs - 有没有办法在 MockedProvider - Apollo Client 中模拟 refetch?

javascript - React.Js 如何重定向表单提交?

c++ - 给定两个偶数,求出它们之间所有偶数的平方和

javascript - 在 Router5 中刷新 View 状态时,另一个 View 的一部分重新出现

javascript - 限制数据列表显示的总条目数