'Can't edit in td input of table in Reactjs

I have two component here Addform (Childcomponent)and App component(parent) I have perform row add and delete operation Why my edit doesn't works ?I have pass the specific row value on which edit has to perform in td input element but I can't perform a onChange event on td input and how to update the data on specific row? How edit can be implement Here?

code

import React, { useState } from "react";
        import Select from "react-select";

        const AddForm = (props) => {
          const newdata = props.editdata;
        
          const [id, setId] = React.useState("");
          const [name, setName] = React.useState("");
          const [gender, setGender] = React.useState("");
    
          console.log(gender);
          return (
            <tr>
              <td>
                <input
                  type="text"
                  value={id}
                  onChange={(e) => {
                    setId(e.target.value);
                  }}
                ></input>
              </td>
              <td>
                <input
                  type="text"
                  value={name}
                  onChange={(e) => {
                    setName(e.target.value);
                  }}
                ></input>
              </td>
              <td>
                <Select options={props.List} value={gender} onChange={setGender} />
              </td>
              <td>
                <button
                  onClick={(e) => {
                    props.addRow({
                      id: id,
                      name: name,
                      genderId: gender.value,
                      gender: gender.label
                    });
                    setId("");
                    setName("");
                    setGender("");
                  }}
                >
                  Add
                </button>
              </td>
            </tr>
          );
        };
    
        const List = [
          {
            value: 1,
            label: "Male"
          },
          { value: 2, label: "Female" }
        ];
    
    
        const App = (props) => {
          const [data, setData] = React.useState([]);
          const [edit, isEdit] = useState(false);
          const [editdata, setEditData] = useState([]);
          const [id, setId] = React.useState(editdata.id || "");
          const [name, setName] = React.useState(editdata.name || "");
          const [gender, setGender] = React.useState(editdata.gender || "");
          const editRow = (e) => {
            setData({ ...data, e });
          };
          return (
            <div>
              <table>
                <tr>
                  <th>Id</th>
                  <th>Name</th>
        
                  <th>Gender</th>
        
                  <th>Action</th>
                </tr>
        
                {data &&
                  data.map((row, idx) => {
                    if (edit === idx) {
                      return (
                        <tr key={idx}>
                          <td>
                            <input
                              type="text"
                              value={editdata.id}
                              onChange={(e) => {
                                setId(e.target.value);
                              }}
                            ></input>
                          </td>
                          <td>
                            <input
                              type="text"
                              value={editdata.name}
                              onChange={(e) => {
                                setName(e.target.value);
                              }}
                            ></input>
                          </td>
                          <td>
                            <Select
                              options={List}
                              value={editdata.gender}
                              onChange={setGender}
                            />
                          </td>
                          <td>
                            {" "}
                            <button
                              onClick={(e) => {
                                editRow({
                                  id: id,
                                  name: name,
                                  genderId: gender.value,
                                  gender: gender.label
                                });
                              }}
                            >
                              save
                            </button>
                          </td>
                        </tr>
                      );
                    } else {
                      return (
                        <tr key={idx}>
                          <td>{row.id}</td>
                          <td>{row.name}</td>
                          <td>{row.gender}</td>
                          <td>
                            <button
                              onClick={(e) => {
                                let _data = data.filter((item) => {
                                  return item.id !== row.id;
                                });
                                setData(_data);
                              }}
                            >
                              Delete
                            </button>
                          </td>
                          <td>
                            <button
                              onClick={(e) => {
                                isEdit(idx);
                                setEditData(row);
                                //       console.log(editdata);
                                <AddForm />;
                              }}
                            >
                              Edit
                            </button>
                          </td>
                        </tr>
                      );
                    }
                  })}
                <AddForm
                  data={data}
                  List={List}
                  setData={setData}
                  editdata={editdata}
                  addRow={(e) => {
                    setData([...data, e]);
                  }}
                />
              </table>
            </div>
          );
        };
        
        export default App

;



Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source