javascript - React - 无法设置未定义的属性

标签 javascript reactjs

我有一个 React 组件,它使用 querySelectorAll 来获取页面上元素的值,然后将它们呈现在组件中。使用下面的代码,我收到错误“无法将“label1”的属性设置为未定义”,但我不确定为什么,因为它使用 querySelector 正确查找值,并且 this.label1 是一个全局变量。

import React from 'react'

class StickyNav extends React.Component {

  setLabels (labels) {
    const [ label1, label2 ] = labels
    if (!label1 || !label2) return
    this.label1 = label1.textContent
    this.label2 = label2.textContent
  }

  getQuery (query, callback) {
    const el = document.querySelectorAll(query)
    if (!el) return
    if (callback) callback(el)
  }

  shouldComponentUpdate (nextProps, nextState) {
    if (this.state.fixed !== nextState.fixed) {
      this.getQuery('#navBar .form-group label', this.setLabels)
      return true
    }
    return false
  }

  render () {
    return (
      <div>
        <div className='form-group'>
          <label htmlFor='choice1'><h4>{this.label1}:</h4></label>
          <span id='choice1'> &nbsp;text</span>
        </div>
        <div className='form-group'>
          <label htmlFor='choice2'><h4>{this.label2}:</h4></label>
          <span id='choice2'> &nbsp;text</span>
        </div>
      </div>
    )
  }
}

export default StickyNav

最佳答案

您在此处引用:

  setLabels (labels) {
    const [ label1, label2 ] = labels
    if (!label1 || !label2) return
    this.label1 = label1.textContent
    this.label2 = label2.textContent
  }

但是 this 没有引用该实例。您必须在构造函数中绑定(bind)该方法或使用 ES7 类属性:

  constructor(props) {
    super(props)
    this.setLabels = this.setLabels.bind(this)
  }

  setLabels = () => {....}

关于javascript - React - 无法设置未定义的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57003665/

相关文章:

javascript - 如何在 React carousal 中为字母表添加动画效果?

javascript - 高级 JavaScript : The ALT way to do Pub/Priv in JS - is a mystery

javascript - nodejs-错误 : spawn ENOENT while adjusting image size using module gm

javascript - 如何使用一个函数的返回值作为另一个函数的返回值

javascript - react 终极版 : Confused about where to define certain actions

javascript - Webpack -- 包含配置文件作为外部资源

javascript - Redux - ES6 更新数组中的对象元素

javascript - .NET Core javascript 到 Controller POST

JavaScript 创建 svg 过滤器

javascript - 在 contentEditable 元素上按 Enter 键时插入 BR 或 P 标签的跨浏览器方式