Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

checkbox onclick changing only after refreshing react js

i have a accordion with checkboxes inside but when i click on check box doesnot toggle but data is submiited ,after refresh check box is toggled

https://codesandbox.io/s/vibrant-moon-9722j?file=/src/App.js:7492-11534 i have created a codesandbox here checkboxes inside User Defined is working i want the same for rest

the problem is because i am filtering the array based on catagery

<div className="accordion-item">
                    <div
                      style={styles.tilte}
                      className="accordion-title "
                      onClick={() => this.navClose("Head")}
                    >
                      {/* // onClick={setActiveCurrentIndex(item[0].date)}> */}
                      <div>Head</div>
                      <i class="fa fa-plus" aria-hidden="true"></i>
                    </div>
                    {this.state.navStatus ? (
                      <div className="accordion-content  tableforsymtm">
                        {this.state.items
                          .filter((person) => person.category == "Head")
                          .map((personData, key) => {
                            return (
                              <span className="trforsymtm">
                                <td key={personData.id}>
                                  <input
                                    // className="invinsiveinput"
                                    data-id={personData.id}
                                    type="checkbox"
                                    id={personData.id}
                                    checked={personData && personData.positive}
                                    onChange={(e) =>
                                      this.handleCheckClick(e, "items", key)
                                    }
                                    // defaultChecked={personData && personData.positive}
                                    // onChange={this.handleCheckClick}
                                  />
                                  {/* <label for={personData.id}>{personData.name}</label> */}
                                </td>
                                <td>{personData.name}</td>
                              </span>
                            );
                          })}
                      </div>
                    ) : null}
                  </div>
                  {/* ))} */}
                  <div className="accordion-item">
                    <div
                      style={styles.tilte}
                      className="accordion-title "
                      onClick={() => this.navClose("Pelvis")}
                      // onClick={setActiveCurrentIndex(item[0].date)}
                    >
                      <div>Pelvis</div>
                      <i class="fa fa-plus" aria-hidden="true"></i>
                    </div>
                    {this.state.Pelvis ? (
                      <div className="accordion-content  tableforsymtm">
                        {this.state.items
                          .filter((person) => person.category == "Pelvis")
                          .map((personData, key) => {
                            return (
                              <span className="trforsymtm">
                                <td key={personData.id}>
                                  <input
                                    // className="invinsiveinput"
                                    data-id={personData.id}
                                    type="checkbox"
                                    id={personData.id}
                                    checked={personData && personData.positive}
                                    onChange={(e) =>
                                      this.handleCheckClick(e, "items", key)
                                    }
                                    // defaultChecked={personData && personData.positive}
                                    // onChange={this.handleCheckClick}
                                  />
                                  {/* <label for={personData.id}>{personData.name}</label> */}
                                </td>
                                <td>{personData.name}</td>
                              </span>
                            );
                          })}
                      </div>
                    ) : null}
                  </div>
           

i think the error is passing the state value


handleCheckClick = (e, stateVal, index) => {
     let prevState = [...this.state[stateVal]];
  prevState[index].positive = e.target.checked;  // i think the error is here
  console.log(index);
  this.setState({ [stateVal]: prevState });
  var date = moment(this.state.dateState).format("YYYY-MM-DD");
  const { id, checked } = e.target.dataset;
  console.log(stateVal);
  if (e.target.checked) {
    var checkbox = "True";
  } else {
    var checkbox = "False";
  }

  const Data = {
    positive: checkbox,
    date: date,
    symptom: id
  };
  const headers = {
    Authorization: `token`
  };
  axios
    .post("customer/symptoms-submit/", Data, {
      headers: headers
    })
    .then(() => {
      alert("symptom was submitted");
    })
    .catch((error) => {
      alert("Cannot add symptoms again");
    });

  
};
like image 365
jisa cd Avatar asked May 10 '26 06:05

jisa cd


1 Answers

Your code is quite unorganized and muddled, but essentially you just need to trigger refetching the data once it is updated. The getData function already does this when the component mounts. Call this function after the successful POST request in the handleCheckClick handler.

handleCheckClick = (e, stateVal, index) => {
  ...

  const headers = {
    Authorization: `token xxxxxx`
  };

  axios
    .post(
      "customer/symptoms-submit/",
      data,
      { headers }
    )
    .then(() => {
      alert("symptom was submitted");
      this.getData(); // <-- trigger refetch data here
    })
    .catch((error) => {
      alert("Cannot add symptoms again");
    });
};
like image 194
Drew Reese Avatar answered May 12 '26 20:05

Drew Reese



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!