すべてのアコーディオンのオンとオフを切り替えるボタンを設定するにはどうすればよいですか?
P粉391677921
P粉391677921 2023-08-30 16:57:51
0
2
636
<p>次のコードを使用して、折りたたみ可能なアコーディオンを作成するコンポーネントがあります。</p> <pre class="brush:php;toolbar:false;">import React、{useState} from 'react'; const Collapsible = (props) =>{ const [open, setOpen] = useState(false); const toggle = () => { setOpen(!open); } 戻る( <div> <button className={props.level} onClick={toggle}>{props.label}</button> {開く && ( <div className="切り替え"> {props.children} </div> )} </div> ) } デフォルトをエクスポート Collapsible;</pre> <p>メイン アプリケーションのいくつかの場所で使用し、場合によっては他のアコーディオンでも使用します。アコーディオンはデータに基づいて動的にレンダリングされるため、ページ上にアコーディオンがいくつあるのか実際にはわかりませんでした。これを念頭に置いて、固定数を設定する必要がなく、メイン アプリケーションのすべてのアコーディオン (つまり、他のコンポーネントの一部のアコーディオン) をレンダリングする必要もなく、すべてのアコーディオンをオン (およびオフ) にするボタンをメイン アプリケーションに作成したいと考えています。そしてメイン アプリケーションにインポートされます)。 </p> <p>これを実現するために ref フックを使用してみました。</p> <ol> <li>折りたたみ可能なコンポーネントのボタンに ref を追加し、props を介して親コンポーネントからアクセスします。 </ol> <pre class="brush:php;toolbar:false;"><button className={props.level} onClick={toggle} ref={props.innerRef}>{props.label}</button> ;</pre> <ol start="2"> <li>メイン アプリケーションに次の参照を追加します。</li> </ol> <pre class="brush:php;toolbar:false;">const childRef = useRef(); const openClick = () => { childRef.state = true; } const closeClick = () => { childRef.state = false; }</pre> <ol start="3"> <li>メイン アプリケーションで次のボタンを使用します。</li> </ol> <pre class="brush:php;toolbar:false;"><ボタン onClick = {openClick}> すべて展開 </ボタン> <ボタンオンクリック = {closeClick}> すべて折りたたむ </ボタン></前> <ol start="4"> <li>レンダリング時にアコーディオンに参照を追加します: </li> </ol> <pre class="brush:php;toolbar:false;"><Collapsible label="" level="content" innerRef={childRef}></pre> <p>これは実際には何も起こりません。おそらく、ステップ 2 で状態にアクセスしようとした方法が間違っていたためです。しかし、試してみる価値はあると思いました...</p> <p>これが可能かどうかについて何かアイデアはありますか? </p>
P粉391677921
P粉391677921

全員に返信(2)
P粉441076405

Redux を使用できます。

  1. アコーディオンをレンダリングするときは、アコーディオンに特定の ID を与え、ストレージに保存します。
  2. スライスを作成しますopenAllAccordions、IDをループして、そのIDに属するアコーディオンをopen=trueに設定します
  3. スライスを作成しますcloseAllAccordions、IDをループして、そのIDに属するアコーディオンをopen=falseに設定します
いいねを押す +0
P粉809110129

コンポーネント インスタンスの多かれ少なかれ任意のコレクションでは、何らかの調整が必要になるのが一般的です。私が成功したアプローチの 1 つは、コンポーネントが登録できるフックが関連付けられた Context を作成することです。このフックは、共有状態のビューと、ニーズに合わせてその状態を変更する関数を返します。

ここで、登録された各コンポーネントを保存する opener 関数を作成し、openAll/closeAll 関数のコンテキストを提供できます。

リーリー

...コンテキストに登録し、おなじみの toggle/open 値を返すために各子コンポーネントによって呼び出されるフックもあります:

リーリー

バッチ操作を実行するための別のフックもあり、これも便利です:

リーリー

サンドボックス

簡単にするために、ここでは、登録された各コンポーネントの一意の識別子として別の opener (別名 setOpen) 関数が使用されていることに注意してください。柔軟な代替方法は、他の識別子を使用することです。これにより、ナビゲーション中などに任意のアコーディオンを開いたり閉じたりすることができます。

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!