質問編集履歴

3

typo修正

2022/01/26 07:22

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -50,7 +50,7 @@
50
50
  私が考えたワークアラウンドとしては
51
51
  ```Child.tsx
52
52
  type ChildComponent<T> = (props: T & {setIsOpen?: React.Dispatch<React.SetStateAction<boolean>>} => JSX.Element
53
- const ChildChildComponent<PropsWithoutSeTIsOpen> = (props) => {
53
+ const Child: ChildComponent<PropsWithoutSeTIsOpen> = (props) => {
54
54
  return (
55
55
  <>
56
56
  <button onClick={props.setIsOpen!(true)}>開く</button>;

2

ワークアラウンド追記

2022/01/26 07:22

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -43,3 +43,19 @@
43
43
 
44
44
  実装時は`Parent`コンポネントを大量に使用したいと考えています。
45
45
  よって可能であれば、子コンポネント側で都度`setIsOpen`あたりをいじらなくてもよいような方法を模索しているのですが、良いアイデアないでしょうか?
46
+
47
+ ---
48
+ 追記
49
+
50
+ 私が考えたワークアラウンドとしては
51
+ ```Child.tsx
52
+ type ChildComponent<T> = (props: T & {setIsOpen?: React.Dispatch<React.SetStateAction<boolean>>} => JSX.Element
53
+ const ChildChildComponent<PropsWithoutSeTIsOpen> = (props) => {
54
+ return (
55
+ <>
56
+ <button onClick={props.setIsOpen!(true)}>開く</button>;
57
+ <button onClick={props.setIsOpen!(false)}>閉じる</button>;
58
+ </>
59
+ };
60
+ ```
61
+ とすることで型エラーも解消し、機能もしたのですがいかんせん`props.setIsOpen!`が気持ち悪いなというところです。

1

背景の補足

2022/01/26 07:05

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -40,3 +40,6 @@
40
40
  しかし、`ChildProps`型を上記コードのように指定すると、`App.tsx`で`<Child />`に`setIsOpen`が渡されていないためエラーとなってしまいます。
41
41
 
42
42
  どのような型定義をすればよいでしょうか?もしくは実装パターンが間違っているのでしょうか?
43
+
44
+ 実装時は`Parent`コンポネントを大量に使用したいと考えています。
45
+ よって可能であれば、子コンポネント側で都度`setIsOpen`あたりをいじらなくてもよいような方法を模索しているのですが、良いアイデアないでしょうか?