#javascript #html #reactjs #ecmascript-6 #jsx
Вопрос:
Я пытаюсь создать фильтр, который фильтрует всех кандидатов на основе опыта. Я построил фильтр с помощью переключателей, который работает нормально, но проблема в том, что он не проверяется. ПО умолчанию я хочу, чтобы все радио btn не проверялись, когда пользователь нажимает один btn, тогда его следует проверить. когда я нажимаю btn, он фильтрует кандидатов, но сам переключатель не проверяется. Мой компонент большой, поэтому я просто предоставил код, который вам всем понадобится. Пожалуйста, помогите мне правильно установить флажок на переключателях. Спасибо
//i'm importing this array and using it in my component
export const filtersByExp = [
{
value: 0,
label: "Fresher",
},
{
value: 1,
label: "1 year above ",
},
{
value: 2,
label: "2 year above ",
},
{
value: 3,
label: "3 year above ",
},
{
value: 4,
label: "4 year above ",
},
{
value: 5,
label: "5 year above ",
},
];
//component
const [filter, setFilter] = useState({
stage: "all",
exp: null,
job_id: null,
});
const handleRadioChange = ({ target }) => {
let value = target.value;
let name = target.name;
setFilter({
...filter,
[name]: value,
});
};
//jsx
{[...filtersByExp].map((item) => (
<div key={item.value} className="mb-2">
<Form.Check
type="radio"
label={item.label}
name="exp"
checked={filter.exp === item.value}
onChange={handleRadioChange}
value={item.value}
/>
</div>
))}
Ответ №1:
Вы должны использовать defaultChecked
в jsx. Потому что при использовании checked
конечное значение никогда не менялось , но по умолчанию проверялась загрузка только при начальном рендеринге в react.
<div key={item.value} className="mb-2">
<Form.Check
type="radio"
label={item.label}
name="exp"
defaultChecked={filter.exp === item.value}
onChange={handleRadioChange}
value={item.value}
/>
</div>
Комментарии:
1. Спасибо, это сработало, но не могли бы вы сказать мне, пожалуйста, почему мы должны использовать проверку по умолчанию вместо проверки в jsx?
2. Потому что, если использовать
checked
конечное значение, оно никогда не менялось, аdefaultChecked
загружалось только при начальной визуализации в react.