yoshikazu0110
@yoshikazu0110 (h y)

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

react typescript 配列更新時 rerenderされない。

解決したいこと

Reactのフレームワークでtypescriptを書いています。
配列Stateに値を追加して再renderしさせたいです。
Stateを更新すれば再renderしてくれると思っていたのですが、
なぜされないのかよくわかりません。

ボタンをクリックすると以下の処理が動き
rowsの配列Stateを更新します。

var [rows, setRowCount] = useState([1]);
function AddAmountDetails(): void{
  rows.push(1);
  setRowCount(rows);
  
  --配列型でない値のStateを更新すると再renderしてくれるので一時的な対策として以下の処理を入れている。
  count = rows.length;
  setCount(count);
}

rowsの配列Stateの更新によって再renderの処理が動くと思ったのですが
動かなくて、どうすればrenderの処理が動くのですかね?

return (
    <div className="App">
      {rows.map((row,index) => (
        <div>
          <p>{row}</p>
        </div>
      ))}
      <input type="hidden" value={count}/>
    </div>
  );

全体のソースコードは以下の通りです。

import React,{ useState, useEffect } from 'react';
import './App.css';

function App() {
  var [rows, setRowCount] = useState([1]);
  var [count, setCount] = useState(1);
  var registUsers :string[] = ["yoshi1","yoshi2","yoshi3"];

  function AddAmountDetails(): void{
    rows.push(1);
    setRowCount(rows);
    count = rows.length;
    setCount(count);
  }

  function DeleteAmountDetails(): void {
    if (rows.length > 1)
    {
      rows.pop();
      setRowCount(rows);
      count = rows.length;
      setCount(count);
    }
  }

  return (
    <div className="App">
      {rows.map((row,index) => (
        <div>
          <p>{row}</p>
        </div>
      ))}
      <input type="hidden" value={count}/>
    </div>
  );
}

export default App;

0

1Answer

Your answer might help someone💌