hide button after all items in array are returned react

i am trying to have the button hide after all items in the array are returned:

const blogs = [
    {src: "/blog1.png"},
    {src: "/blog2.png"},
    {src: "/blog3.png"},
    {src: "/blog4.png"},
    {src: "/blog5.png"},
];

const Thumbnails = ({ image, index = 0}) => {
    return (
        <Thumbnail className={`Thumbnail image${index}`}>
            <Image src={image.src} />
        </Thumbnail>
    )
}

function BlogMain() {
    const [visible, setVisible] = useState(3);
    const loadMore = () => {
        setVisible((prevValue) => prevValue + 3);
    };

    return (
           <div>
                    <Container>
/*returns all blogs as images  */
                    {blogs?.slice(0, visible).map((image, index) => (
                            <Thumbnails key={index} image={image} index={(index + blogs.length)} >
                        ))}
                    </Container>

 /* want {loadMore} to only render if index < blogs.length. when it reaches blog.length, button should hide / null. */
                    <Button onClick={loadMore}>
                        <ButtonText>Load more</ButtonText> 
                    </Button> 

            </div>
            );
        }

this is wrong, and i am not sure what to do but i am trying to set the function {loadMore} to only render < blogs.length. then at blogs.length to {toHide} button or return null

const [visible, setVisible] = useState(3);
const loadMore = () => {
    setVisible((prevValue) => prevValue + 3);
  };

  const [hide, setHide] = useState(false);
  const toHide = () => {
    setHide((prevValue) => prevValue + blogs.length);
  };

  <Button onClick={loadMore}>
  {setHide? {loadMore} <ButtonText>Load more</ButtonText> : null}
  </Button> 

>Solution :

You can just conditionally render the button to only show if visible <= blogs.length:

{visible <= blogs.length && 
  <Button onClick={loadMore}>
    <ButtonText>Load more</ButtonText> 
  </Button> 
}

Leave a Reply