代码之家  ›  专栏  ›  技术社区  ›  Deadpool

setState未更新简单示例[duplicate]中的值

  •  0
  • Deadpool  · 技术社区  · 6 年前

    为什么我得到的状态在这里是未定义的?我尝试了各种各样的解决办法,但没有一种对我有效。有人能指出我做错了什么吗

      class Sidebar extends React.Component {
        constructor (props) {
          super(props)
          this.state = {
            menuSelected: menuOptions.menuItems[0].title,
          }
          this.createMenuListItem = this.createMenuListItem.bind(this)
        }
        render () {
          console.log(this.state.menuSelected)
          function getChildItems (child) {
            let childItems = child.children.map(function (menuItem, index) {
              return createMenuListItem(menuItem)
            })
            return (
              <li key={child.title} className='dropdown'>
                <i className={child.iconName} />
                <span className='dropdown-toggle'>{child.title}</span>
                <ul className=''>
                  {childItems}
                </ul>
              </li>
            )
          }
          function createMenuListItem (menuItem) {
            if (menuItem.hasChild === 'N') {
              console.log(this.state.menuSelected)
              return (
                <li key={menuItem.title}>
                  <a href='#'>
                    <i className={menuItem.iconName} />
                    <span>{menuItem.title}</span>
                  </a>
                </li>
              )
            } else {
              return getChildItems(menuItem)
            }
          }
    
          let menuItemsLoaded = menuOptions.menuItems.map((menuItem, index) => {
            return createMenuListItem(menuItem)
          })
          return (
            <nav id='sidebar'>
              <ul className='list-unstyled'>
                {menuItemsLoaded}
              </ul>
            </nav>
          )
        }
      }
    
      export default Sidebar
    

    当从服务器动态加载侧边栏内容时,是否有人可以建议更好的选择

    0 回复  |  直到 8 年前
        1
  •  14
  •   Hemerson Carlin    8 年前

    利用 function this

    在这种情况下,可以将箭头功能用作:

    render() {
      createMenuItems = (items) => {
        console.log(this.state.menuSelected)
        ...
      }
    }
    

    或 我的建议来了 createMenuItems 外 render

    createMenuItems = (items) => {
      console.log(this.state.menuSelected)
    }
    
    render() {
      return (
        <nav id='sidebar'>
          <ul className='list-unstyled'>
            {menumenuOptions.menuItems.map((menuItem, index) =>
              this.createMenuListItem(menuItem)
            )}
          </ul>
        </nav>
      )
    }
    

    在构造函数中绑定它也是一种可能性:

    class YourComponent extends React.Component {
      constructor(props) {
        super(props)
    
        this.state = {
          menuSelected: '',
        }
    
        this.createMenuListItem = this.createMenuListItem.bind(this)
      }
    
      createMenuListItem() {
        console.log(this.state.menuSelected)
      }
    
      render() {
        return (
          <nav id='sidebar'>
            <ul className='list-unstyled'>
              {menumenuOptions.menuItems.map((menuItem, index) =>
                this.createMenuListItem(menuItem)
              )}
            </ul>
          </nav>
        )
      }
    }