Reactを学んでいます。さまざまなサイトの一部の人は、refs を使用するのは悪い習慣だと皆に言います (そうです、まったく使用していません)。
それと本当の取引は何ですか?たとえば、子コンポーネントにアタッチするのは悪いことですか(内部のものにアクセスできるようにします)?
ありがとう!
Reactを学んでいます。さまざまなサイトの一部の人は、refs を使用するのは悪い習慣だと皆に言います (そうです、まったく使用していません)。
それと本当の取引は何ですか?たとえば、子コンポーネントにアタッチするのは悪いことですか(内部のものにアクセスできるようにします)?
ありがとう!
うーん...答えとしての資格があるかどうかはわかりませんが、コメントには長すぎます。
システムのさまざまな状態を示すウィジェットを含むダッシュボードがあるとします。各ウィジェットには、独自のデータ ソースと独自のコントロールがあります。おそらく、それらは時々リフレッシュされることさえあります。ただし、ユーザーがシステムの更新されたビューを見たい場合は、ダッシュボード レベルに [更新] ボタンがあります。このようなボタンの実装は簡単ではありません。
Redux アプリケーションを使用している場合は、dispatch('refresh')
すべての子に対して「偽造」するという選択肢があります。それを切り離すために、ロード時に各ウィジェットがアクションを登録するため、親は単純にすべてのアクションを実行し、命令型の更新が必要なときにそれらを起動します。
非 Redux/Flux システム、またはより複雑で動的なシナリオでは、これは不可能であるか、それほど単純ではない可能性があります。refresh
その場合、すべてのウィジェットでメソッドを公開し、親 (または、所有者) からアクセスする方が、複雑さを考慮してより適切な場合があります。
class WidgetA extends React.Component {
refresh() {
console.log('WidgetA refreshed');
}
render() {
return (
<h3>WidgetA</h3>
);
}
}
class WidgetB extends React.Component {
refresh() {
console.log('WidgetB refreshed');
}
render() {
return (
<h3>WidgetB</h3>
);
}
}
class Dashboard extends React.Component {
constructor() {
super();
this.onRefresh = this.handleRefresh.bind(this);
this.onRegister = this.handleRegister.bind(this);
this.widgets = [];
}
handleRegister(widget) {
this.widgets.push(widget);
}
handleRefresh() {
this.widgets.forEach((widget) => {
widget.refresh();
});
}
render() {
return (
<div>
<button onClick={this.onRefresh}>Refresh</button>
<hr />
<WidgetA ref={this.onRegister} />
<WidgetB ref={this.onRegister} />
</div>
);
}
}
もちろん、冗長性を抑えた、そのようなものです。
補足として、私は@skavの回答に賛成票を投じ、これらのシナリオは避けるべきだと考えています。これは例外です。