javascript - 不从数组返回 <li>

标签 javascript reactjs

我只是想将数组中的 li 呈现为 ul(有序列表),但出于某种原因,它对我不起作用。当我映射数组时,这显示错误 Map is not a function。任何帮助将不胜感激

import React from 'react';
import './style.css';

class List extends React.Component {

  constructor() {
    super();
    this.state = {
      list: [<li>Default-li</li>]
    }
  }

  render() {

    return (
      <div className='global'>

        <button onClick={() => {
          this.setState({ list: this.state.list.push(<li>Added-li</li>) })
          console.log(this.state.list.length);
        }
        }>ADD</button>

        <ul>
          {
            this.state.list.map((li) => {
              return (li);
            })
          }
        </ul>

      </div>
    );
  }

}

export default List;

最佳答案

你得到它是因为在第一个 renderlist 还没有填充。
尝试有条件地渲染它:

this.state.list && this.state.list.map((li) => {
              return (li);
            })

另一个问题是你的 setState,建议使用 setState 的功能版本并在它的参数中访问 list(我也在使用 ES6 spread语法而不是推送和改变数组):

this.setState(prevState => ({ list: [...prevState.list, <li>Added-li</li>] }))

运行示例:

class List extends React.Component {
  constructor() {
    super();
    this.state = {
      list: [<li>Default-li</li>]
    };
  }

  render() {
    return (
      <div className="global">
        <button
          onClick={() => {
            this.setState(prevState => ({ list: [...prevState.list, <li>Added-li</li>] }))
            console.log(this.state.list.length);
          }}
        >
          ADD
        </button>

        <ul>
          {this.state.list &&
            this.state.list.map(li => {
              return li;
            })}
        </ul>
      </div>
    );
  }
}

ReactDOM.render(<List />, document.getElementById("root"));
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script>
<div id="root"></div>

编辑
作为您评论的跟进,
setState 的功能版本不是这里的问题,但它更好用,因为 setState 批量更新,你可能没有你期望的当前更新状态。
使用功能性 setState 版本,您保证获得状态的当前“版本”。
您可以在 DOCS 中阅读更多相关信息.

这里真正的问题是你使用了 Array#push它不返回数组而是返回 new length of it (它会改变原始数组,这也被认为是不好的做法)。

这就是我使用 ES6 array spread syntax 的原因这允许我们为新数组创建浅拷贝并将其与新值组合。

关于javascript - 不从数组返回 <li>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48845132/

相关文章:

javascript - 为什么 Chrome(在 Electron 内部)会突然重定向到 chrome-error ://chromewebdata?

javascript - 拆分一个 HTML 页面以在多个屏幕上显示不同的 View

javascript - 异步等待后获取 Promise 数组

javascript - react Redux : Using Immutable in Reduce State

javascript - 如何使用 axios 将数据作为数组对象发布

javascript - 将输入字段堆叠在一起

javascript - 查找文本字段和文档的具体id和类。写入它

javascript - 确认 DatePicker 时间更改

java - 如何在 React.js 中显示服务器(Java)异常消息

javascript - 如何只让那些 props 传递给组件,组件是根据 switch 决定的