Вы правы, проблема в строке:
this.state.tests[id].user = event.target.value;
Это тот момент, когда вы изменяете свое состояние напрямую.
У вас есть несколько вариантов.
Вы можете сначала «клонировать» массив, а затем обновить его:
const newTests = [...this.state.tests];
newTests[id].user = event.target.value;
this.setState({tests: newTests});
Вы также можете использовать immutability-helper
:
const {value} = event.target;
this.setState(prevState => update(prevState, {[id]: {user: {$set: value}}}));
В этом примере вам нужно извлечь value
из вашего события, потому что небезопасно получать доступ к значениям события в асинхронных вызовах после обработки события.