Вы находитесь рядом с тем местом, где вы хотите быть, здесь есть только две вещи:
- Связывание каждого набора кнопок с символом.
- Отслеживание состояния для каждого символа.
Это естественный вариант использования управляемых компонентов.Управляемая радио-кнопка будет выглядеть примерно так:
<input
key={someID}
type="radio"
value={choice}
checked={this.state.choice === choice}
onChange={() => this.handleChange(choice)}
/>
с обработчиком изменений:
handleChange = newChoice => {
this.setState({
choice: choice
});
}
(см. https://reactjs.org/docs/forms.html)
Применение этого к вашей проблеме,в конечном итоге вы получите что-то вроде этого:
const choices = [
"Yes",
"No",
"Maybe"
]
const choiceCard = characterData.map((character, key) => {
return (
<label key={character.id}>
{character.name}
{choices.map(choice => {
return (
<input
key={choice}
type="radio"
value={choice}
checked={this.state.userChoices[key] === choice}
onChange={() => this.handleChange(choice, key)}
/>
);
})}
</label>
);
});
И следующий обработчик изменений:
handleChange = (choice, key) => {
this.setState(prevState => ({
userChoices: { ...prevState.userChoices, [key]: choice }
}));
};
Вот быстрый и грязный кодекс, с которым вы можете поиграть, чтобы помочь вашему пониманию: https://codepen.io/anon/pen/axzMxm?editors=0010