1

I'm having trouble in React modifying values from an array with useState after rendering them to a table. Here's a simple example:

  //The hook
  const [awayAbilityAdjust, setAwayAbilityAdjust] = useState([1, 1, 1, 1, 1]);

Now, I render it to a table in Bootstrap with a Form:

                            <tr>
                              <td>Ability Adjust</td>
                              {awayAbilityAdjust.map((ability, index) => (
                                <td key={index}>                               
                                  <Form.Control
                                    size="sm"
                                    type="number"
                                    name="ability-input"
                                    step="0.1"
                                    value={ability}
                                    style={{
                                      width: "50px",
                                      backgroundColor: "#6d784b",
                                      color: "#ffff",
                                    }}
                                    min="0"
                                    max="10"
                                    onChange={updateHomeAbility(index)
                                    }
                                  />
                                  </td>
                              ))}
                            </tr>

Here is updateHomeAbility:


  const updateHomeAbility = (index) => (e) => {
    const updatedArray = [...homeAbilityAdjust];
    homeAbilityAdjust[index] = e.target.value;
    setHomeAbilityAdjust(updatedArray);
  };

However this doesn't change any of the values when I select the up and down buttons on the Form. How can I modify these values using useState?

2
  • 2
    Can you show the code of updateHomeAbility? Commented Sep 1, 2021 at 18:17
  • @RonB. Apologies, just added it, silly of me. Commented Sep 1, 2021 at 23:40

1 Answer 1

3

You're updating homeAbilityAdjust after copying it to updatedArray. You simply need to update updatedArray instead.

const updateHomeAbility = (index) => (e) => {
  const updatedArray = [...homeAbilityAdjust];
  updatedArray[index] = e.target.value;
  setHomeAbilityAdjust(updatedArray);
};
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.