javascript - 列表不会在带有 onClick 按钮的 React hook 中重新呈现

标签 javascript reactjs

我有一个简单的 ul 列表,它开始为空,当我单击“添加项目”按钮时,它将元素添加到 dom(我可以通过检查看到它),但它只是没有真正在屏幕上呈现 li 项目...

import React, { useState } from 'react'
import Index from './Index.css'

const Animatedlist = (props) => {

    const [items, setItems] = useState([])
    const [count, setCount] = useState(0);
    const listItems = items.map((item) => <li key={item.id}>{item.value}</li>)

    const addItem = () => {
        console.log('asdasd6')

         setItems([
            ...items,
            {
                id: items.length,
                value: 'New Item'+items.length
            }
        ])

        return items

    }

        return ( 
            <>
                <ul>
                    {/* {items.map(item => { return <li key={item.id}> {item.value} </li> })} */}
                    {listItems}
                </ul>

                <button onClick={addItem}>{props.buttonText}</button>



                <p>You clicked {count} times</p>
                <button onClick={() => setCount(count + 1)}></button>
            </>
        )

}

export default Animatedlist

最佳答案

代码看起来和工作正常:

const { useState, Fragment } = React;

const Animatedlist = (props) => {

    const [items, setItems] = useState([])
    const [count, setCount] = useState(0);
    const listItems = items.map((item) => <li key={item.id}>{item.value}</li>)

    const addItem = () => {
        console.log('asdasd6')

         setItems([
            ...items,
            {
                id: items.length,
                value: 'New Item'+items.length
            }
        ])

        return items

    }

        // I've used React.Fragment because the SO compiler doesn't support <>
        return ( 
            <Fragment>
                <ul>
                    {/* {items.map(item => { return <li key={item.id}> {item.value} </li> })} */}
                    {listItems}
                </ul>

                <button onClick={addItem}>{props.buttonText}</button>



                <p>You clicked {count} times</p>
                <button onClick={() => setCount(count + 1)}></button>
            </Fragment>
        )

}

ReactDOM.render(<Animatedlist buttonText="Add item" />, document.getElementById('app'));
<script src="//cdn.jsdelivr.net/npm/react@16.8.6/umd/react.development.min.js"></script>
<script src="//cdn.jsdelivr.net/npm/react-dom@16.8.6/umd/react-dom.development.min.js"></script>

<div id="app"></div>

如果您在浏览器 DOM 检查器中看到元素已添加到 DOM 并且它们不可见,则唯一可能的原因是 CSS。确保<li>使用 display: none; 不会隐藏 s , visibility: hidden; , opacity: 0; , left: -9999px;

关于javascript - 列表不会在带有 onClick 按钮的 React hook 中重新呈现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56659003/

相关文章:

javascript - Bootstrap : Navbar Item Stuck on Active State After Scrolling To Another Item?

javascript - Angular 2 Electron 项目编译出现问题

javascript - AngularJS:指令限制: 'E' 阻止在 Jasmine 单元测试中调用元素 click() 事件

reactjs - 使用 useContext 钩子(Hook)时如何访问提供者值

reactjs - 如何使用 React Hooks 将 props 和其他参数传递给函数?

javascript - Facebook 长轮询请求中的 for(;;) 是什么?

javascript - html 中的 data-reveal-id 属性到底是什么?与经典 id 属性有什么区别?

javascript - 在大量对象中改变单个对象属性的最快方法是什么?

javascript - 使用异步 setState 进行 React 测试

javascript - 如何在 react 中获取对象中的嵌套数组?