#javascript #reactjs #react-native #react-hooks
#javascript #reactjs #react-native #реагирующие хуки
Вопрос:
У меня есть вложенный объект, и из этого объекта визуализации я хочу получить доступ к данным в соответствии с щелчком пользователя. Пример: в приведенный ниже объект я загрузил первый вопрос с помощью response.pathway.вопрос и ответ с помощью response.pathway.answers теперь, если пользователь нажмет «Да», тогда следующим следующим ключом должен быть response.pathway.answers.Да, и если пользователь нажимает на Нет, то следующей клавишей должен быть response.pathway.answers.Нет, короче говоря, какой бы ответ пользователь ни выбрал, он должен быть добавлен в конце концов.
Теперь проблема в том, что я использую flatlist, чтобы показывать ответы, которые возвращают элемент, и когда я добавляю этот элемент в последний из object key, он выдает ошибку. И я знаю, что он выдает ошибку, потому что в объекте, подобном response.pathway.answers.item, нет ключа.Итак, мой вопрос в том, как я могу сделать этот элемент динамичным, например, если пользователь выберет «да», то он должен быть похож на response.pathway.answers.Да, и наоборот. (Обратите внимание, что внутри ключа ответов может быть что угодно, а не только «да нет»).
{
"pathway": {
"question ": "this is first question",
"answers": {
"Yes": {
"question": "this question i want to access if user click on yes"
},
"No": {
"question": "this question i want to access if user click on no"
}
}
}
}
Комментарии:
1. получите ответ в переменной и сделайте вот так
response["pathway"]["answer"]["Yes"]
, вы можете сохранить имя ключа в переменной и получить желаемый результат.2. предположим, что пользователь выбрал yes, затем сохраните `var selectedOption = «yes»; var res = response.pathway.answer[Выбранный вариант]; Для получения дополнительной информации см. w3schools.com/js/js_objects.asp
Ответ №1:
const key = 'anything you want'
const value = 'anything you want'
.....
{
"pathway": {
"question ": "this is first question",
"answers": {
// key is dynamically
[key]: value
}
}
}
вы также можете сделать подобное obj.pathway.annswers[key] = 'value'
Ответ №2:
Я не уверен, что понял вопрос, но вы, возможно, захотите попробовать следующее: поскольку вы хотите получить доступ к любому ключу внутри pathway.answer
объекта, то для доступа к его элементам вы можете использовать индексацию, а не точечную нотацию.
Это означает, что вы также можете получить доступ pathway.answer.Yes
этим способом pathway.answer['Yes']
.
Теперь вам нужно только получить полезную нагрузку того, на что пользователь нажал, чтобы получить к нему доступ (например).
for (let buttonElem of document.querySelectorAll('.answer-button')) {
buttonElem.addEventListener('click', () => alert(buttonElem.innerHTML));
}
const data = {
pathway: {
question: 'whatever',
answers: {
yes: 'something',
no: 'something else',
litteralyAnythingElse: 'find something idk'
}
}
};
const answerDiv = document.getElementById("answer");
for (let buttonElem of document.querySelectorAll('.answer-button')) {
buttonElem.addEventListener('click', () => {
answerDiv.innerHTML = data.pathway.answers[buttonElem.innerHTML];
});
}
<button class="answer-button">yes</button>
<button class="answer-button">no</button>
<button class="answer-button">litteralyAnythingElse</button>
<div id="answer">
</div>