Лучший шаблон для создания и редактирования формы в React + Ionic FrameworkJavascript

Форум по Javascript
Ответить
Anonymous
 Лучший шаблон для создания и редактирования формы в React + Ionic Framework

Сообщение Anonymous »

Я создаю приложение и использую модальное окно Ionic, чтобы иметь возможность открыть представление для ввода информации. Я не использую форму реагирования. Я просто использую поля ввода, которые я проверяю и onSubmit. Я извлекаю данные из формы useState и передаю их родительскому элементу, который вызывает модальное окно, которое затем преобразует их в тип данных, который мне нужен для отображения информации. Я хочу иметь возможность использовать представление для редактирования существующей информации. Проводка немного сложна, и я новичок в реагировании и Ionic. Я мало что знаю о закономерностях, но знаю, что существуют стандарты, которым следует следовать при таком типе поведения. Я знаю, что самый простой путь — просто создать новое представление для редактирования, но цель реакции — повторное использование компонентов. ChatGPT полезен, но также сбивает меня с толку и заставляет теряться в деталях и отвлекаться от темы. Сначала Чат предложил разделить openModal на openCreate и OpenEdit, а также передать модальному модальному модулю переменную mode и InitialValue и соответствующим образом настроить поведение. Затем было предложено использовать небольшую оболочку, которая вызывает общий OpenModal с начальными значениями и вводит любые другие необходимые значения. Я чувствую, что оболочка усложняет ситуацию, поэтому я пытаюсь сделать первый. openEdit и createEdit немного сбивают с толку, поскольку логика на странице запутанна. Я просто немного растерялся, если иду в правильном направлении. У кого-нибудь есть какие-нибудь советы?
import {
IonButtons,
IonButton,
IonHeader,
IonContent,
IonToolbar,
IonTitle,
IonPage,
IonItem,
IonInput,
useIonModal,
} from '@ionic/react';
import { OverlayEventDetail } from '@ionic/core/components';

const ModalExample = ({ dismiss }: { dismiss: (data?: string | null | undefined | number, role?: string) => void }) => {
const inputRef = useRef(null);
return (




dismiss(null, 'cancel')}>
Cancel


Welcome

dismiss(inputRef.current?.value, 'confirm')} strong={true}>
Confirm










);
};

function Example() {
const [present, dismiss] = useIonModal(ModalExample, {
dismiss: (data: string, role: string) => dismiss(data, role),
});
const [message, setMessage] = useState('This modal example uses the modalController to present and dismiss modals.');

function openModal() {
present({
onWillDismiss: (event: CustomEvent) => {
if (event.detail.role === 'confirm') {
setMessage(`Hello, ${event.detail.data}!`);
}
},
});
}

return (



Controller Modal



openModal()}>
Open

{message}


);
}

export default Example;```

This is a snippet of what chat proposed for the first solution

``` const defaultForm: NewProjectForm = { name: "", totalHouses: 1, description: "" };

const [presentCreate, closeCreate] = useIonModal(ProjectFormModal, {
onDismiss: (d?: NewProjectForm | null, r?: string) => closeCreate(d, r),
mode: "create",
initialForm: defaultForm,
});

const currentFormRef = useRef(defaultForm);

const [presentEdit, closeEdit] = useIonModal(ProjectFormModal, {
onDismiss: (d?: NewProjectForm | null, r?: string) => closeEdit(d, r),
mode: "edit",
// pass a ref so each open uses the latest value
initialForm: currentFormRef.current,
baselineForm: currentFormRef.current,
});

function openCreate() {
presentCreate({ onWillDismiss: handleCreateDismiss });
}

function openEdit(project: ProjectCardProps) {
currentFormRef.current = projectToForm(project); // update ref first
presentEdit({ onWillDismiss: (e) => handleEditDismiss(project.id, e) });
}
```



Подробнее здесь: https://stackoverflow.com/questions/797 ... -framework
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Javascript»