jQueryがDOMで動作します。それは要素を見つけ、その上にいくつかの汚いトリックを行います。したがって、単純なinput
要素は、DOMイベントリスナーを持つ小さな木になります。
はがそれらをレンダリングを経由してコンポーネントからDOMを構築反応します。 DOM要素にコンポーネントターンを作成するには、DOMツリー内の特定のポイントに、このコンポーネントマウントを反応します。コンポーネントがマウントされた後は、document.getElementById
などの古いDOM APIからアクセスできます。
リアクタントコンポーネントは、コンポーネントがマウントされた後に実行される関数であるため、DOMツリーに存在することが保証されています。ドットを接続
は、あなたはこのように、componentDidMount
内jQueryのものを使用する必要があります。
class MyComponent extends Component {
componentDidMount() {
$('.datepicker').pickadate({
selectMonths: true, // Creates a dropdown to control month
selectYears: 15 // Creates a dropdown of 15 years to control year
});
}
render() {
return (
<input
className="datepicker"
onChange={event => console.log('Just changed!', event.target.value)} />
);
}
}
しかし、より良い練習は、その参照を経由して、特定のDOM要素を参照することである(the documentationを参照)、そのコード
class MyComponent extends Component {
constructor() {
super();
}
componentDidMount() {
const node = this.input;
$(node).pickadate({
selectMonths: true, // Creates a dropdown to control month
selectYears: 15 // Creates a dropdown of 15 years to control year
});
}
render() {
return (
<input
className="datepicker"
ref={node => {
this.input = node;
}}
onChange={event => console.log('Just changed!', event.target.value)} />
);
}
}
Reactでは、DOMは2次的であり、コンポーネントの状態と小道具によって表される基本データからのみレンダリングされます。 UIはあなたにもこのデータを更新するの世話をする必要があるが、それはこの質問の範囲外だと完全にgoogleableである理由これは、データの更新reactivelyに応答します。
私は上記のコードを実行しようとしたが、私はのonChangeまたはonClickの外に吐き出すために何かを得るように見えることはできません。理論はありますか?マテリアライズド・ジャバスクリプトは、これらのリスナーが正しく機能しないようにすることができますか? – Vangogh500
これは、入力フィールドが実際にこれらのイベントを受け取っていないために起こると思います。 jQueryはDOMを突然変異させるので、非常に普通です。イベントを聞いてコンポーネントのメソッドに接続するプラグインの方法を探す必要があると思います。 –