2016-09-06 42 views
0

コードを消去するために不要なコードを削除します。スタンドアロンの完全なHTMLファイルは次のとおりです。キーを押すと、入力がフォーカスを失うと予想されますが、実際にはフォーカスは失われません。コンポーネントがぼやけていません。反応しません。反応します.js

私は、ぼかしをsetTimeout(、0)で囲むと動作します。しかし、なぜオリジナルは機能しませんか?

解決
<!DOCTYPE html> 
<html lang="en"> 
<head> 
    <meta charset="UTF-8"> 
    <script src="https://npmcdn.com/[email protected]/dist/react.js"></script> 
    <script src="https://npmcdn.com/[email protected]/dist/react-dom.js"></script> 
    <script src="https://npmcdn.com/[email protected]/browser.min.js"></script> 
    </head> 
<body> 
<div id="root"> 

</div> 
<script type="text/babel"> 
    class HelpBox extends React.Component { 
     constructor(props) { 
      super(props); 
      this.state = { 
      }; 
      window.addEventListener("keydown", this.keyDown.bind(this), false); 
     } 

     componentDidMount() { 
      this.refs.searchWord.focus(); 
     } 

     componentWillUpdate(nextProps, nextState) { 
      console.log('will blur', this.refs.searchWord); 
      this.refs.searchWord.blur(); 
     } 

     keyDown(e) { 
      this.setState({}); 
     } 

     render() { 
      return <div> 
       <input key="search" ref="searchWord" className="search" type="text" 
       /> 
      </div> 
     } 
    } 

    ReactDOM.render(
      <HelpBox/>, 
      document.getElementById('root') 
    ); 
</script> 
</body> 
</html> 

私は、()のレンダリングで反応によって復元されcomponentWillUpdateでDOMを、触れました。それがReactがLOLをやるべきことです。

答えて

0

​​イベントは、blurfocusイベントas defaultをトリガーします。 setTimeoutが指定されていない場合、this.refs.searchWord.blur()はデフォルトのfocusより前に実行されます。this.refs.searchWord.blur()がスタックしているためです。 setTimeoutでは、this.refs.searchWord.blur()がキューに入れられます。つまり、this.refs.searchWord.blur()がデフォルトのfocusと他の関数がスタック内で実行されます。スタック、キュー、イベントループに精通していない場合は、this video

+0

をご確認ください。しかし、あなたが正しい理由をピン止めしているとは思わないでください:1.私が反応を使用しない場合、keydownコールバックのblur()は問題ありません。 https://jsfiddle.net/oss3jfLy/ – user147932

+0

2.私はonFocusとonBlurを入力要素にバインドします。彼らは解雇されません。 – user147932

+0

これらのイベントはDOM要素で発生します。 onflur'と '$( '。search')を試してみてください。onfocus' on chrome dev。イベントが発生するのがわかります。 –

関連する問題