前提・実現したいこと
Reactで複数のチェックボックスのチェックされている状態とされていない状態を管理したいです。
現状では、ischecked
という1つのstateで管理されており、どのチェックボックスをクリックしたかに関わらず、状態が変更してしまう状態です。
それをチェックボックス毎分離して管理したいと思っています。
この要件の次のステップとして、チェックをを入れるとそのチェックしたチェックボックスに応じてAPIを取得して、別のコンポーネントに渡すという要件があるため、親コンポーネントでstateを管理したいです。
該当のソースコード
- App.jsx
JavaScript
1import React from "react"; 2import { CheckBoxes } from "./components/index"; 3 4export default class App extends React.Component { 5 constructor(props) { 6 super(props); 7 this.state = { 8 error: null, 9 isLoaded: false, 10 prefs: [], 11 isChecked: false, 12 }; 13 14 this.changeIsChecked = this.changeIsChecked.bind(this); 15 } 16 17 changeIsChecked = () => { 18 this.setState({ 19 isChecked: !this.state.isChecked 20 }) 21 console.log(this.state.isChecked) 22 } 23 24 componentDidMount() { 25 fetch("https://opendata.resas-portal.go.jp/api/v1/prefectures", { 26 headers: { 27 "X-API-KEY": "APIキーが入ります", 28 }, 29 }) 30 .then(res => res.json()) 31 .then( 32 (data) => { 33 this.setState({ 34 isLoaded: true, 35 prefs: data.result 36 }); 37 }, 38 (error) => { 39 this.setState({ 40 isLoaded: true, 41 error 42 }); 43 } 44 ) 45 } 46 47 render() { 48 const { error, isLoaded } = this.state; 49 if (error) { 50 return <div>Error: {error.message}</div>; 51 } else if (!isLoaded) { 52 return <div>Loading...</div>; 53 } else { 54 return ( 55 <CheckBoxes prefs={this.state.prefs} isChecked={this.state.isChecked} changeIsChecked={this.changeIsChecked} /> 56 ); 57 } 58 } 59} 60 61
- CheckBoxes.jsx
import React from "react"; import { CheckBox } from "./index"; const CheckBoxes = (props) => { return ( <> {props.prefs.map((pref) => { return ( <CheckBox name={pref.prefName} key={pref.prefCode} isChecked={props.isChecked} changeIsChecked={props.changeIsChecked} /> ); })} </> ); }; export default CheckBoxes;
- CheckBox.jsx
import React from "react"; const CheckBox = (props) => { return ( <> <label htmlFor='check'>{props.name}:</label> <input type='checkbox' id='check' isChecked={props.isChecked} onClick={() => props.changeIsChecked()} /> </> ); }; export default CheckBox;
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/12/26 12:53
2020/12/26 13:29
2020/12/26 13:59 編集
2020/12/26 14:36