React中的getElementById

时间:2016-10-26 07:55:07

标签: javascript reactjs null getelementbyid

此刻出现此错误:

Uncaught TypeError: Cannot read property 'value' of null

我在下面的渲染函数中调用它:

<input type="submit" className="nameInput" id="name" value="cp-dev1" onClick={this.writeData}/>

我也试过在这里调用它

componentWillMount: function(){
        var name = document.getElementById('name').value;
      },

如何获取输入文本字段的id并读取该值并确保它不为空?

我认为在尝试读取元素之后DOM正在加载,因此它为null

3 个答案:

答案 0 :(得分:10)

您需要在componentDidMount生命周期中拥有您的函数,因为这是在DOM加载时调用的函数。

利用refs访问DOM元素

<input type="submit" className="nameInput" id="name" value="cp-dev1" onClick={this.writeData} ref = "cpDev1"/>

  componentDidMount: function(){
    var name = React.findDOMNode(this.refs.cpDev1).value;
    this.someOtherFunction(name);
  }

有关 How to access the dom element in React

的更多信息,请参阅此答案

答案 1 :(得分:0)

如果您的组件是这样的,您可能必须执行diff并将document.getElementById('name')代码放入条件中。

// using the new hooks API
function Comp(props) {
  const { isLoading, data } = props;
  useEffect(() => {
    if (data) {
      var name = document.getElementById('name').value;
    }
  }, [data]) // this diff is necessary

  if (isLoading) return <div>isLoading</div>
  return (
    <div id='name'>Comp</div>
  );
}

如果不执行diff,您将得到null

答案 2 :(得分:-1)

import React, { useState } from 'react';

function App() {
  const [apes , setap] = useState('yo');
  const handleClick = () =>{
    setap(document.getElementById('name').value)
  };
  return (
    <div>
      <input id='name' />
      <h2> {apes} </h2>
      <button onClick={handleClick} />
  </div>
  );
}

export default App;