【问题标题】:Looping through an object in react在反应中循环对象
【发布时间】:2020-11-26 22:27:31
【问题描述】:

学习反应

试图从一个返回 json 对象的 API 调用中循环一个对象并显示它,但难以实现它

这是应该渲染它的组件

    export default class ProfilePage extends Component {
  constructor() {
    super();
    this.state = { data: '' };
  }

  mapObject(object, callback) {
    return Object.keys(object).map(function (key) {
        return callback(key, object[key]);
      })

  }

  async componentDidMount() {
    const response = await fetch(`https://indapi.kumba.io/webdev/assignment`);
    const json = await response.json();
    // console.log(json)
    this.setState({ data: json });
    
  }

  

  render() {
    const data = this.state.data
    console.log(data)
    return (
      <div className="row">
          {Object.values(data).map(data => {
              <div key={key}>
                {data[key]}
              </div>
          })

          }
         Woerkkk please
    </div>
    
    );
  }
}

我得到的只是一个空白屏幕。

在控制台中我收到错误 'key' is not defined no-undef

【问题讨论】:

  • 您想循环浏览响应中的 items 吗?循环对象本身似乎不太合乎逻辑。
  • 尝试使用 {data.key} 而不是 {key}

标签: javascript json reactjs object


【解决方案1】:

您的地图中缺少用于渲染方法的返回语句。 编辑:键不是从 Object.values 返回的

要么用这样的 return 语句重新配置:

{Object.keys(data).map(key => {
          return (<div key={key}>
            {data[key]}
          </div>);
      })

或者您也可以使用方括号从箭头函数隐式返回

{Object.keys(data).map(key => (
          <div key={key}>
            {data[key]}
          </div>)
      ))

【讨论】:

  • 这是非常正确的观点,但没有解决使用未声明变量key 的基本问题。
  • 谢谢。能够修复它
【解决方案2】:

使用Object.values(myObj) 可以将所有对象值作为数组获取。因此,使用这个数组,您可以遍历数组并显示您的项目,如下所示:

{Object.values(myObj).map(value => <p>{value}</p>)}

不要忘记在迭代时使用key prop。

【讨论】:

    【解决方案3】:

    您可以使用 useState 和 useEffect 来获取对象数据

    const App = () => {
    
      const [objData, setObjData] = useState({});
      const [objItems, setObjItems] = useState([]);
      
     const fetchObj = async () => {
         const response = await fetch(`https://indapi.kumba.io/webdev/assignment`);
         const data = await response.json();
         setObjData(data);
         setObjItems(data.items);
        }
        
        useEffect(() => {
           fetchObj()
        },[]);
        
        return(
        <div> 
             <h1> Order Id :{objData.order_id}</h1>  
              // or any other objData keys
                 <h1>Items : </h1>
                 <ul>
                    {
                     objItems.map((i, idx) => {
                     return(
                       <li key={idx}>Name : {i.name} , Category: {i.category}, Price: {i.price}, Currency: {i.currency}</li>
                      )
                    })
                   }
                </ul>
    
        </div>
        )
    }
    export default App;

    【讨论】:

    • 嗨,它有效,但是当我想渲染或循环“项目”时,它是一个带有 json 响应的对象数组,我得到 errorCannot read property '2' of undefined
    • 对于对象中存在的项目或任何数组,您可以为此类项目创建新状态并获取它(更改代码):
    猜你喜欢
    • 2018-01-18
    • 1970-01-01
    • 1970-01-01
    • 2017-07-14
    • 1970-01-01
    • 2021-12-13
    • 2022-11-11
    • 2022-07-06
    • 2017-06-15
    相关资源
    最近更新 更多