【问题标题】:How to display next data after clicking Next Button单击下一步按钮后如何显示下一个数据
【发布时间】:2020-11-29 23:32:42
【问题描述】:

我正在获取一个在页面加载时成功显示的 json 文件。而且我需要在点击下一个按钮后显示下一个项目。

假设db.json:

{ 
  "person": [
    {
      "name": "John",
      "occupation": "band-member" 
    },
    {
      "name": "Paul",
      "occupation": "band-member" 
    },
    {
      "name": "George",
      "occupation": "band-member" 
    },
    {
      "name": "Ringo",
      "occupation": "band-member" 
    },
  ]
}

import React, { useState, useEffect } from 'react';

const HomePage = () => {
    const [count, setCount] = useState(0);
    const [name, setName] = useState([]);

    useEffect(() => {
        setCount(0);
        getNames();
        // eslint-disable-next-line
    }, []);

    const handleNextItem = () => {
        setCount(count + 1);
        console.log(name[count]);
    };

    const getNames = async () => {
        const res = await fetch('/person');
        const data = await res.json();
        setName(data);
    };

    return (
        <div>
            <button onClick={handleNextItem}>Next</button>
            {/* <span>{name}{' '}{occupation}</span>  ---Where the next first and next items should be displayed  */}
        </div>
    );
};

export default HomePage;

我需要有关 reactjs map() 的进一步帮助。谢谢。

【问题讨论】:

    标签: arrays reactjs mapping


    【解决方案1】:

    试试这个:

    import React, { useState, useEffect } from 'react';
    
    const HomePage = () => {
        const [count, setCount] = useState(0);
        const [name, setName] = useState([]);
        const [activeName, setActiveName]= useState(null)
        
        useEffect(() => {
            setCount(0);
            getNames();
            // eslint-disable-next-line
        }, []);
        
        const handleNextItem = () => {
            setActiveName(name[count + 1]);
            setCount(count + 1);
            console.log(name[count]);
        };
        
        const getNames = async () => {
            const res = await fetch('/person');
            const data = await res.json();
            setName(data);
            setActiveName(data[count]);
        };
        
        return activeName ? (
            <div>
                <button onClick={handleNextItem}>Next</button>
                <span>{activeName.name}</span>
            </div>
        ) : null;
    };
    
    export default HomePage;
    

    【讨论】:

    • 嗨,谢谢,这个可以,但是一旦组件加载,我需要显示第一个项目。是否可以使用 useEffect 进行设置?如果是,那么如何?
    猜你喜欢
    • 2022-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-28
    • 1970-01-01
    相关资源
    最近更新 更多