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

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

新規登録して質問してみよう
ただいま回答率
85.48%
TypeScript

TypeScriptは、マイクロソフトによって開発された フリーでオープンソースのプログラミング言語です。 TypeScriptは、JavaScriptの構文の拡張であるので、既存の JavaScriptのコードにわずかな修正を加えれば動作します。

React.js

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

Q&A

1回答

327閲覧

(再投稿) React 共通処理でstate変更したい

satodesu

総合スコア38

TypeScript

TypeScriptは、マイクロソフトによって開発された フリーでオープンソースのプログラミング言語です。 TypeScriptは、JavaScriptの構文の拡張であるので、既存の JavaScriptのコードにわずかな修正を加えれば動作します。

React.js

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

0グッド

0クリップ

投稿2020/04/06 03:12

編集2020/04/06 03:13

on/offを切り替えるswitchがあり、切り替えるときにchangeState関数が呼ばれます。
引数として渡されるkeyの中身は{numberState: true}の形で渡されます。
setStateで渡されたstateの値を変えたいのですがうまくいきません。
わかる人がいましたら教えて欲しいです。よろしくお願いします。

interface IState { numbers: boolean; symbol: boolean; texxt: boolean; } const index:FC = () => { const [state, setState] = useState<IState>(); const changeState = (key: IState) => { console.log(key) setState({ ...state, ...{ key: !key }}); }; <Switch checked={numberState} onChange={(e) => changeState({ numbers: e.target.checked })} /> <Switch checked={textState} onChange={(e) => changeState({ text: e.target.checked })} /> <Switch checked={symbolState} onChange={(e) => changeState({ symbol: e.target.checked })} />

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

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

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

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

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

fiveHundred

2020/04/06 03:21

質問は編集できるので、次からは再投稿はしないでください。
satodesu

2020/04/06 03:25

すいません。 わかりました!
guest

回答1

0

useState で初期値を設定した方がいい気がします。(後述)

TypeScript

1 const [state, setState] = useState<IState>();

引数として渡されるkeyの中身は{numberState: true}の形で渡されます。

key という変数名を見たら普通はオブジェクトではなくキー ('numbers', 'symbol', 'text' など) が入ってるものと思うのですが…。
また、key にオブジェクトが入ってるなら setState({ ...state, ...{ key: !key }}); はおかしいです。単純に setState({ ...state, ...key }); で良いのでは。

TypeScript

1 const changeState = (key: IState) => { 2 console.log(key) 3 setState({ ...state, ...{ key: !key }}); 4 };

numberState などの変数はありませんので、checked には state.numbers などを指定すべきでは。
そして、useState で初期値が指定されてないと state の初期値が undefined なのでエラーになります。

tsx

1 <Switch 2 checked={numberState} 3 onChange={(e) => changeState({ numbers: e.target.checked })} 4 />

Material-UI の Switch をお使いでしたら、e.target からは値を取れないようなので、次のようにする必要があると思います。

tsx

1 <Switch 2 checked={state.numbers} 3 onChange={(e) => changeState({ numbers: !state.numbers })} 4 />

投稿2020/04/06 05:25

編集2020/04/06 21:17
hoshi-takanori

総合スコア7895

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

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

satodesu

2020/04/06 06:38

返信ありがとうございます。 setState({ ...state, ...key });にしたのですがswitchのon/offが切り替わらなくなりました。
hoshi-takanori

2020/04/06 06:50

onChange の中で e.target.checked の前に ! をつけたらいいかも。
satodesu

2020/04/06 06:57

変わらなかったです
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問