質問は出来るだけ問題がはっきりしている方が解答しやすいです。
とは言え最初は問題を切り分けることも難しいということもあるかと思います。
そういった場合は可能な限りソースコードは全文を貼り、エラーメッセージ等も出ているのであれば全て貼るようにしましょう。
以下、修正が必要そうな箇所を順番に記載しました。
useEffect について
まず、useEffect
を勘違いされているかと思うので、そちらから説明させていただきます。
useEffect
はレンダリングの際に第二引数に指定されている値に更新があったときだけ実行される関数です。今回は第二引数のリストが空なので、初回レンダリングの時のみ実行されるというプログラムになっています。
したがって、ボタンを押したときに実行されるという仕様とは合っていないかと思います。
input フォームで入力した値の管理について
inputfromで入力した値(name)がButtonを押されるとsetNamesで値が入る
とのことですが、React では inputform の更新も状態で管理するのが一般的かと思います。
したがって、もう1つ状態管理変数を用意して、以下のように記載するといいかと思います。
TypeScript
1const [name, setName] = useState<string>('')
2
3return (
4 <>
5 <input value={name} onChange={(e) => setName(e.value.target)} />
6 </>
7)
ボタンを押したときの処理は name
の値を names
に加えて、さらに axios でポストすることになります。
axios.post について
axios.post は第一引数が url 、第二引数がポストする値です。
先ほどの inputform の管理と合わせて以下のように記載するのがいいかと思います。
TypeScript
1const [names, setNames] = useState<names[]>([])
2const [name, setName] = useState<string>('')
3
4const onClicke = () => {
5 // データを json 形式に整形
6 const data = {
7 name: name,
8 check: // true か false?
9 } as names
10
11 // names に値の追加
12 const nameList = names.concat([data])
13 setNames(nameList)
14
15 // axios でポスト
16 axios.post('/users/name', data)
17}
18
19return (
20 <>
21 <input value={name} onChange={(e) => setName(e.value.target)} />
22 <button onClick={onClick} />
23 </>
24)
その他気になったこと
names
型が定義されていますが、names
の変数と被っていてとてもややこしいです。
型名は最初を大文字にするのが一般的かと思います。
また、リストにして初めて複数だと思うので、複数形の s は不要かと思います。