How to update only selected component with react hooks

Hello!

I’m coding a to-do list using React hooks. Every added item has two dropdown list where the user can decide how urgent the task (urgency value) is and how long the thing to do will take (speed value). Updating either list will add their value into a ‘score’ property.

By clicking a “Sort” button I can sort the entries based on the score.

Right now the problem is that if I have more then one to-do item with different urgency and speed value, the score will always be the same for both components.

Can somebody help how to fix this? Thanks

function ToDo(){
  const [ input, setInput ] = React.useState('')
  const [ toDo, setToDo ] = React.useState([])
  const [ score, setScore ] = React.useState(0)
  const [ speed, setSpeed ] = React.useState(0)
  const [ urgency, setUrgency ] = React.useState(0)

  return(
    <div>
      <h2>List of things to do</h2>
      <input
          value={ input }
          onChange={ (e) => setInput( e.target.value ) }/>
      <button 
        onClick={ () => {
          setToDo( toDo.concat(input))
          setInput('')
          }}>Add
      </button>
      <ul>
        { toDo.map(( task, idTask ) => {
          return (
            <li 
              key={idTask}
              score={ speed + urgency }>
              {task}<br/>
              <select onChange={(e) => { setSpeed(Number(e.target.value)) }}>
                <option value={1}>slow</option>
                <option value={2}>medium</option>
                <option value={3}>fast</option>
              </select><br/>
              <select onChange={(e) => { setUrgency(Number(e.target.value)) }}>
                <option value={1}>non-urgent</option>
                <option value={3}>urgent</option>
              </select>
              <span 
                onClick={ 
                  (index) => {
                    const newTodos = [...toDo]
                    newTodos.splice(index, 1);
                    setToDo( newTodos)
                  }}>
                [-------]
              </span>
            </li>
            )
          })
         }
      </ul>
      <button onClick={ 
          () => { 
            const sortMe = [...toDo].sort((a, b) => b - a)
            setToDo( sortMe )
          }}>Sort!</button>
    </div>
    )
  }

ReactDOM.render(<ToDo/>, document.getElementById('app'));

Probably split the components, have one for the to-dos list and one for the individual todos, what you have at the minute is super complicated. At the minute you have one state value for urgency/speed, those values are specific to individual to-dos. Pass the setToDo function down to the to-dos, then you can set the state in that component and then save it to the to-do list using that setToDo function.