#javascript #reactjs
#javascript #reactjs
Вопрос:
У меня есть это приложение: https://codesandbox.io/s/misty-smoke-n5f1e?file=/Person.js:123-1128
Идея приложения заключается в следующем:
- Рядом с каждым пользователем находится тег select с их жанром.
- Каждый пользователь должен иметь возможность самостоятельно назначить их конкретному
toy
, выбрав опцию. пример: Карл может назначить себя толькоtoyType: "M"
, выбравM
из select, и после выбора я должен получить следующие данные:
0: Object
color: "red"
toyType: "M"
persons: Array[1]
0: Object
name: "Carl"
a&e: 17
1: Object
color: "white"
toyType: "F"
- Если другой пользователь нажимает на
M
, его имя и возраст также должны быть добавлены вpersons
массив сверху. - Отключены опции, которые не соответствуют
type
свойству person; НАПРИМЕР: ЛизаM
отключила bic, потому что ее тип неM
ноF
; - Каждый пользователь может добавить их самостоятельно в определенную игрушку только один раз, а не дважды.
const Person = ({ person, k }) =&&t; {
// console.lo&(person)
const thisPerson = { name: person.name, a&e: person.a&e };
function handleChan&e(value) {
console.lo&(`selected ${value}`);
const result = toys.map((i) =&&t; {
if (value === i.toyType) {
return {
...i,
persons: toys.persons ? [...i.persons, thisPerson] : [thisPerson]
};
} else {
return { ...i };
}
});
console.lo&("result", result);
return resu<
}
return (
<div&&t;
<Select
placeholder="select"
style={{ width: 120 }}
onChan&e={handleChan&e}
&&t;
{toys.map((i, k) =&&t; (
<Option
disabled={
i.toyType.toLocaleLowerCase() !== person.type.toLocaleLowerCase()
}
key={k}
value={i.toyType}
&&t;
{i.toyType}
</Option&&t;
))}
</Select&&t;
<span&&t;{person.name}</span&&t;
</div&&t;
);
};
export default Person;
Здесь,
if (value === i.toyType) {
return {
...i,
persons: toys.persons ? [...i.persons, thisPerson] : [thisPerson]
};
} else {
return { ...i };
}
…я пытаюсь реализовать функциональность, при которой пользователи могут назначать себя определенной игрушке, но возникает проблема, когда другой пользователь хочет добавить себя в одну игрушку, где уже существует пользователь, потому что предыдущий пользователь исчезает, а его место появляется последним, но мне нужно иметь массив пользователей.
Также я не могу понять, как запретить пользователям дважды подписывать себя на одну и ту же игрушку.
Вопрос: Кто знает, как решить проблемы? Спасибо
Комментарии:
1. Мне не совсем понятно, какую проблему вы пытаетесь описать. В живой демонстрации каждый пользователь может выбрать один из двух вариантов, и все. Я не вижу, где вы храните какую-либо информацию о состоянии или что работает не так, как ожидалось. Можете ли вы уточнить?
2. @David, идея приложения такова: каждый пользователь может быть назначен одной игрушке, у которой есть свойство
toyType
, если persontype
===toyType
, то paerson может назначить себя игрушке. Теперь эта функциональность существует. Но также каждая игрушка после назначения persons может создавать дополнительные свойства, такие как:persons
, которые представляют собой массив, в котором могут храниться persons. Теперь я могу добавить одного человека, но если я добавлю второго, это переопределит предыдущего из массива, также я хочу запретить двойное назначение одного и того же человека.3. @Дэвид, скажи мне, пожалуйста, если понятно. Спасибо
4. @David, в
console.lo&("result", result);
я должен получить результат. Не могли бы вы помочь?5. Вы спрашиваете, как поддерживать состояние в React? В настоящее время вы нигде не сохраняете этот результат, вот почему это новый результат после каждой операции. В вашем приложении нет управления состоянием. Похоже, вам больше всего пригодились бы некоторые руководства по React и по управлению данными в состоянии компонента (в данном случае, вероятно, с использованием
useState
хука в React).