Я пытаюсь создать модальный в React, который имеет разные кнопки в зависимости от типа модала. (Предупреждения должны просто отображать кнопку «ОК», в то время как подтверждают, что следует отображать «ОК» и «Отмена».) Я пытаюсь использовать оператор переключателя для рендеринга различных компонентов кнопки в зависимости от типа подсказки. Однако при повторном рендере кнопки оповещения отображаются, даже если свойство opupup.type обновляется до opuptype.confirm вместо Popuptype.alert .
Сначала я подозревал, что родительский компонент фактически не повторно разбирался. Но я обнаружил, что могу изменить значение opup.text , и оно будет правильно обновлено при повторном render. Я также первоначально был передавать Popuppup.type в качестве опоры на Popupbuttons , но переход на usecontext () не решил проблему (несмотря на то, что, вероятно, была лучшая практика независимо).
Более того, когда я добавил консоли. Popuptype.confirm , но затем все еще рендеринг компонента alertbuttons вместо Conformbuttons компонент.
Rendering popup box with 1
Context updated, popup.type = 1
Alert buttons
1 is allegedly equal to 1
< /code>
Вывод следующего рендеринга: < /p>
Rendering popup box with 2
Context updated, popup.type = 2
Alert buttons
2 is allegedly equal to 1
Что происходит, почему это происходит, и как лучше всего это сделать?/* ********* *
* CONSTANTS *
*************/
const PopupType = Object.freeze({
ALERT: 1,
CONFIRM: 2
});
/* *************** *
* CONTEXT BUILDER *
*******************/
function usePopups() {
const popupContext = useContext(PopupContext); // PopupContext is an object, { type: (int), text: (str) }.
if(!popupContext) throw new Error(ERROR_CONTEXT);
return popupContext;
}
export { PopupContext };
/* *************** *
* REACT COMPONENT *
*******************/
function AlertButtons() {
return
OK
}
function ConfirmButtons({ onConfirm }) {
return
OK
Cancel
}
function PopupButtons() {
const { popup } = usePopups();
console.log(`Context updated, popup.type = ${popup.type}`);
switch(popup) {
case PopupType.CONFIRM:
console.log("Confirm buttons");
return ;
case PopupType.ALERT:
default:
console.log("Alert buttons");
console.log(`${popup.type} is allegedly equal to ${PopupType.ALERT}`);
return ;
}
}
function PopupBox() {
const { popup } = usePopups();
console.log(`Rendering popup box with ${popup.type}`);
return
{popup.text}
}
export default PopupBox;
Подробнее здесь: https://stackoverflow.com/questions/797 ... h-react-js
Оператор переключения неправильного поведения с React.js ⇐ Javascript
Форум по Javascript
-
Anonymous
1757519360
Anonymous
Я пытаюсь создать модальный в React, который имеет разные кнопки в зависимости от типа модала. (Предупреждения должны просто отображать кнопку «ОК», в то время как подтверждают, что следует отображать «ОК» и «Отмена».) Я пытаюсь использовать оператор переключателя для рендеринга различных компонентов кнопки в зависимости от типа подсказки. Однако при повторном рендере кнопки оповещения отображаются, даже если свойство opupup.type обновляется до opuptype.confirm вместо Popuptype.alert .
Сначала я подозревал, что родительский компонент фактически не повторно разбирался. Но я обнаружил, что могу изменить значение opup.text , и оно будет правильно обновлено при повторном render. Я также первоначально был передавать Popuppup.type в качестве опоры на Popupbuttons , но переход на usecontext () не решил проблему (несмотря на то, что, вероятно, была лучшая практика независимо).
Более того, когда я добавил консоли. Popuptype.confirm , но затем все еще рендеринг компонента alertbuttons вместо Conformbuttons компонент.
Rendering popup box with 1
Context updated, popup.type = 1
Alert buttons
1 is allegedly equal to 1
< /code>
Вывод следующего рендеринга: < /p>
Rendering popup box with 2
Context updated, popup.type = 2
Alert buttons
2 is allegedly equal to 1
Что происходит, почему это происходит, и как лучше всего это сделать?/* ********* *
* CONSTANTS *
*************/
const PopupType = Object.freeze({
ALERT: 1,
CONFIRM: 2
});
/* *************** *
* CONTEXT BUILDER *
*******************/
function usePopups() {
const popupContext = useContext(PopupContext); // PopupContext is an object, { type: (int), text: (str) }.
if(!popupContext) throw new Error(ERROR_CONTEXT);
return popupContext;
}
export { PopupContext };
/* *************** *
* REACT COMPONENT *
*******************/
function AlertButtons() {
return
OK
}
function ConfirmButtons({ onConfirm }) {
return
OK
Cancel
}
function PopupButtons() {
const { popup } = usePopups();
console.log(`Context updated, popup.type = ${popup.type}`);
switch(popup) {
case PopupType.CONFIRM:
console.log("Confirm buttons");
return ;
case PopupType.ALERT:
default:
console.log("Alert buttons");
console.log(`${popup.type} is allegedly equal to ${PopupType.ALERT}`);
return ;
}
}
function PopupBox() {
const { popup } = usePopups();
console.log(`Rendering popup box with ${popup.type}`);
return
{popup.text}
}
export default PopupBox;
Подробнее здесь: [url]https://stackoverflow.com/questions/79761037/switch-statement-misbehaving-with-react-js[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия