首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >焦点:无法读取null的属性“”TypeError“”

焦点:无法读取null的属性“”TypeError“”
EN

Stack Overflow用户
提问于 2018-12-23 13:57:59
回答 2查看 10.1K关注 0票数 3

我有一个反应组件,如下所示。当我为下面的组件执行测试用例时,我得到了下面的错误,尽管在浏览器上我看到元素是生成的,但在编译中没有错误。

错误:

焦点:无法读取null的属性“”TypeError“”

代码语言:javascript
复制
  at Check.componentDidMount (src/components/Payments/Check.js:42:42)
  at node_modules/react-test-renderer/lib/ReactCompositeComponent.js:262:25
  at measureLifeCyclePerf (node_modules/react-test-renderer/lib/ReactCompositeComponent.js:73:12)
  at node_modules/react-test-renderer/lib/ReactCompositeComponent.js:261:11
  at CallbackQueue.notifyAll (node_modules/react-test-renderer/lib/CallbackQueue.js:74:22)
  at ReactTestReconcileTransaction.close (node_modules/react-test-renderer/lib/ReactTestReconcileTransaction.js:34:26)
  at ReactTestReconcileTransaction.closeAll (node_modules/react-test-renderer/lib/Transaction.js:207:25)
  at ReactTestReconcileTransaction.perform (node_modules/react-test-renderer/lib/Transaction.js:154:16)
  at batchedMountComponentIntoNode (node_modules/react-test-renderer/lib/ReactTestMount.js:67:27)
  at ReactDefaultBatchingStrategyTransaction.perform (node_modules/react-test-renderer/lib/Transaction.js:141:20)
  at Object.batchedUpdates (node_modules/react-test-renderer/lib/ReactDefaultBatchingStrategy.js:60:26)

Check.js

代码语言:javascript
复制
export default class Check extends Component {
  static displayName = 'Check';

  static propTypes = {
    check: PropTypes.object,
    translate: PropTypes.func.isRequired,
    countries: PropTypes.object,
    states: PropTypes.object,
    setCheckState: PropTypes.func.isRequired
  };

  onChange = (fieldName, newValue) => {
    let sanitizedFieldName = fieldName.replace('selected', '');
    sanitizedFieldName = sanitizedFieldName.charAt(0).toLowerCase() + sanitizedFieldName.substr(1);
    const newCheckState = {
      ...this.props.check,
      [sanitizedFieldName]: newValue
    };
    this.props.setCheckState(newCheckState, sanitizedFieldName === 'country');
  }

  componentDidMount() {
    document.getElementById('mainHeader').focus();
  }

  render() {
    const { translate, check, countries, states } = this.props;
    const parentType = 'check';
    const stateObj = states[check.country] || { optionArray: [] };

    return (
        <div>
          <div tabIndex="0" id="mainHeader"><h1 {...resolve(CheckStyles, 'mainHeader')}>
            {translate('PanelPaymentsCheckHeaderText')}
          </h1></div>
          <div {...resolve(CheckStyles, 'bankInfoContainer')}>
            <h3 {...resolve(CheckStyles, 'bankAccountHeader')}>
              {translate('PanelPaymentsCheckSubHeaderText')}
            </h3>
            ........
            ........                
          </div>
        </div>
    );
  }
}
EN

回答 2

Stack Overflow用户

发布于 2018-12-24 16:21:06

我添加了null检查来消除这个错误。这是一个愚蠢的解决方案。

代码语言:javascript
复制
componentDidMount() {
  if(this.refs.mainHeader){
  this.refs.mainHeader.focus();
   }
}
票数 3
EN

Stack Overflow用户

发布于 2018-12-23 14:11:12

尝试使用ref代替id,即

代码语言:javascript
复制
componentDidMount() {
  this.refs.mainHeader.focus();
}

..。

代码语言:javascript
复制
<div tabIndex="0" ref="mainHeader"><h1 {...resolve(CheckStyles, 'mainHeader')}>
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53901553

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档