質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Next.js

Next.jsは、Reactを用いたサーバサイドレンダリングなどを行う軽量なフレームワークです。Zeit社が開発しており、nextコマンドでプロジェクトを作成することにより、開発環境整備が整った環境が即時に作成できます。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

React.js

Reactは、アプリケーションのインターフェースを構築するためのオープンソースJavaScriptライブラリです。

Q&A

1回答

4198閲覧

next.jsでチェックボックスを全選択・全解除できるボタンを実装したい

donnjara

総合スコア1

Next.js

Next.jsは、Reactを用いたサーバサイドレンダリングなどを行う軽量なフレームワークです。Zeit社が開発しており、nextコマンドでプロジェクトを作成することにより、開発環境整備が整った環境が即時に作成できます。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

React.js

Reactは、アプリケーションのインターフェースを構築するためのオープンソースJavaScriptライブラリです。

0グッド

0クリップ

投稿2021/09/24 05:17

前提・実現したいこと

現在、apiで取得したデータの数だけ増えていく(データ情報+チェックボックス付きの)がセットになったコンポーネントを作っています。別コンポーネントにあるボタンを押してそのチェックボックスのコンポーネントのチェックが全て選択、解除できるようにしたいと思っております。
文章で説明するのが難しいのでソースコードをご確認いただけたら幸いです。

該当のソースコード

不要な部分は見やすいように記述しておりません。追加の情報が必要でしたらお手数ですがおっしゃってください。

js

1親コンポーネント 2import FrontLayout from "../../components/Templates/frontLyout"; 3import React,{useState} from "react"; 4import FavoriteBuild from "../../components/form/front/favorite-build/favorite-build" 5import UserFavoriteHeader from "../../components/header/user-favorite-header" 6import useSWR from "swr" 7 8export default function Favorite() { 9 const testUrl = '...' 10 const fetcher = url => fetch(url).then(r => r.json()) 11 let data = useSWR(testUrl, fetcher) 12 let newdata = data.data 13 14 return( 15 <> 16 <FrontLayout> 17 <FavoriteBuild newdata={newdata}/> 18 </FrontLayout> 19 ↓↓↓↓↓↓ こちらのコンポーネントにあるボタンを押すとchangeAll関数が呼び出されるとようにしたい 20 <UserFavoriteHeader data={newdata} changeAll={changeAll}} /> 21  </> 22 ) 23}

js

1子コンポーネント 2import FavoritecheckBox from "./favorite-building-check" 3 4export default function FavoriteBuildingBuy(props) { 5 let newdata = props.newdata 6 7 8 return( 9 <> 10 {newdata == undefined ?<p>読込中...</p> 11 : 12 <> 13 {newdata.map((value, idx) => ( 14 <div key={value.title}> 15 <FavoritecheckBox value={value} title={value.title}> 16 ... 17 </FavoritecheckBox> 18 19 </div>))} 20 </> 21 } 22 </> 23 24 ) 25}

js

1孫コンポーネント 2import { useState } from "react" 3export default function FavoritecheckBox(props){ 4 let title = props.title 5 let value = props.value 6 7 return( 8 <> 9 10 <div> 11 <label> 12 ↓↓↓↓↓↓↓↓↓↓対象のチェックボックス 13 <input className="check-box-list" type="checkbox"/> 14 <div>{title}</div> 15 </label> 16 </div> 17 {props.children} 18 19 ) 20}

試したこと

選択肢の数がわかっており同一ページ内の全選択の方法などは調べると出てくるのですが、別コンポーネントで押して対象のチェックボックスを全選択にする方法などが出てきませんでした。ここから全選択できる方法はないのでしょうか?
また、ない場合どういった方法で全選択全解除を実装することができるのでしょうか?お力を貸していただけると幸いです。よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

現状のままでは、チェックボックスの値はReactから制御しない構造になっています。

無理やりこのままやるとすれば、「DOMでチェックボックスを探してチェック状態を変更する」ような実装となりますが、あまりおすすめはしません。

一般には、チェックの状態を管理するstateをReact内に持たせて、チェック・チェック解除・全チェック・全解除などの操作に合わせて、状態変数を変更していく、というような流れで実装を行います。

投稿2021/09/24 05:24

maisumakun

総合スコア146018

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

donnjara

2021/09/24 05:30

stateは今回の場合ですと、親コンポーネントで管理するという形になるのでしょうか?
maisumakun

2021/09/24 05:33

そうですね、リセットボタンを親につける以上は親にstateを入れる必要があります。
donnjara

2021/09/24 05:36

ご連絡ありがとうございます。その方向で実装進めていきたいと思います!
donnjara

2021/09/24 05:37

その形で実装ができましたらベストアンサーにさせて頂きます????‍♂️
donnjara

2021/09/24 06:27

何度もすみません。親コンポーネントで下記のような形で管理しようとしたのですが、個別のinputを押した時に個別に変化させるにはどうすればよろしいのでしょうか? 上記にある孫コンポーネントのinputタグを押した時に呼ばれる関数でcheckを変えたいと思ったのですが、親コンポーネントで全て管理しているので全てにチェックがついてしまうのですが、こちらどういった解決方法があるのでしょうか?たびたびで申し訳ないのですが、ご教授いただけると幸いです。 const [check, checkFlg] = useState(false) 全選択・全解除を押した時 const changeAll = () =>{ if(check == true) { checkFlg(false) }else if(check == false){ checkFlg(true) } } ----->propsとして渡して...<input checked={check} />
maisumakun

2021/09/24 06:34

> 親コンポーネントで全て管理しているので全てにチェックがついてしまうのですが 変数が1つしかなければ、全部同じチェック状態にならざるを得ません。配列あるいは連想配列で個々のチェック状態をバラバラに管理できるようにしましょう。
donnjara

2021/09/24 07:13

配列でバラバラに管理するというのは理解できるのですが、今回の場合だと初めの const [check, checkFlg] = useState({ }) の部分に どのような記述をしたら良いのか全くイメージが湧かないのですが、教えていただけないでしょうか?孫にあるinputとどのように繋げるのか検討がつきません、、、
maisumakun

2021/09/24 08:14

それより前に確認しておきたいのですが、孫コンポーネントで「let value = props.value」としているにも関わらず、このvalueがどこでも使われていません。 valueはどういう値が入っていて、何に使うべきものなのでしょうか?
donnjara

2021/09/25 02:27 編集

連絡が遅くなってしまって大変申し訳ないです。 孫コンポーネントに記載のあるprops.vaulueは関係のないapiのデータ関連のものです。valueなどの名前はややこしいのでこういった使用は無くします、、、
donnjara

2021/09/25 06:39

const [checked, setChecked] = useState({}); const [isCheckAll, setIsCheckAll] = useState(false); const changeChecked = e => { setChecked({ ...checked, [e.target.value]: e.target.checked }); } const handleSelectAll = e => { }; 上記のように個別のinputは関数をつけてチェックの付けはずしができるようになったのですが、一つのボタンで全選択、全解除する方の記述をどのようにすればよろしいのでしょうか、、
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問