Пример кода и подробные шаги, полученные из документации Ionic, для использования элемента управления Picker в вашем решении.
Обзор
Это пример приложения Ionic ReactJS, использующий Компонент IonPicker, полученный из простого примера javascript, представленного в Документации по сборщику Ionic Framework.
Мы также используем React Hooks для управления состоянием, а пример основан на шаблоне Ionic ReactJS, поэтому мы поддерживаем Typescript.
Настройка компонента
import React from “react”; import { PickerColumn } from “@ionic/core”; import { IonPicker } from “@ionic/react”; /** * the component has three properties that are defined in this * interface since we are using typescript */ interface _Props { isOpen : boolean onSave : Function onCancel : Function } const MyPicker: React.FC<_Props> = ({onSave, onCancel, isOpen}) => { return <div></div> }
Свойства средства выбора, которые будут обрабатываться
onSave
, когда пользователь выбирает параметры в средстве выбора, будет вызываться методonSave
для возврата выбранных значений.onCancel
, когда выбранonCancel
, внутри компонента в этом примере не выполняются никакие действияisOpen
, свойство, которое передается в компонент, чтобы позволить компоненту определить, должен ли он быть видимым.
Что будет отображать сборщик
Настройка двух столбцов данных для компонента выбора. Так как этот компонент позволит пользователю выбрать день недели и время сеанса утром или днем
const DayColumn = { name: “Day”, options: [ { text: “Monday”, value: “Monday” }, { text: “Tuesday”, value: “Tuesday” }, { text: “Wednesday”, value: “Wednesday” }, { text: “Thursday”, value: “Thursday” }, { text: “Friday”, value: “Friday” } ] } as PickerColumn;
второй столбец
const SessionTimeColumn = { name: “SessionTime”, options: [ { text: “Morning 8a — 12p”, value: “Morning” }, { text: “Afteroon 1p — 5p”, value: “Afteroon” } ] } as PickerColumn;
Визуализация содержимого компонента средства выбора
Мы используем компонент IonPicker
и передаем ему соответствующие свойства. isOpen
, который передается из родительского компонента. columns
— это константы, которые мы создали выше DayColumn
и SessionTimeColumn
, а затем, наконец, buttons
для доступных действий, которые может предпринять пользователь.
Мы также используем свойства событий для onSave
и onCancel
, чтобы сообщить родительскому контейнеру, какие события были инициированы в компоненте, и передать значения, где это необходимо.
return ( <div> <IonPicker isOpen={isOpen} columns={[DayColumn, SessionTimeColumn]} buttons={[ { text: “Cancel”, role: “cancel”, handler: value => { onCancel() } }, { text: “Confirm”, handler: value => { onSave(value) } } ]}> </IonPicker> </div> );
Когда пользователь выбирает определенные элементы из средства выбора, ниже приведен пример объекта, возвращаемого функцией onSave
. Это информация, которая будет передана родительскому компоненту при выполнении функции.
{ “Day” : { “text”: “Wednesday” “value”: “Wednesday” “columnIndex”: 0 }, “SessionTime” : { “text”: “Morning 8a — 12p” “value”: “Morning” “columnIndex”: 1 } }
Рендеринг MyPicker
в App.tsx
Нам нужен соответствующий импорт в файле App.tsx
, чтобы использовать компонент MyPicker
, а также реагировать на обработчики состояния, чтобы управлять видимостью средства выбора и отслеживать выбранные значения из средства выбора.
Дополнительная информация об использовании React Hooks https://reactjs.org/docs/hooks-state.html
import React, { useState } from “react”; import “./Home.css”; import MyPicker from “../components/MyPicker”;
Мы используем машинописный текст в этом примере реакции, поэтому полезно определить интерфейс ISessionTime
для информации о состоянии, которую мы отслеживаем для выбора пользователя из компонента MyPicker
.
export interface ISessionTime { weekday: string; period: string; }
Для управления видимостью MyPicker
мы используем функцию setPickerOpen
, а значение состояния сохраняется в pickerIsOpen
.
Для управления результатами выбора пользовательского средства выбора мы используем функцию setSessionTime
, а значение состояния сохраняется в sessionTime
.
const [pickerIsOpen, setPickerIsOpen] = useState(false);
const [sessionTime, setSessionTime] = useState<ISessionTime | undefined>(
undefined
);
В пользовательском интерфейсе мы предоставляем две кнопки для взаимодействия с состоянием приложения.
- «Select Session»: откроет компонент
MyPicker
, чтобы пользователь мог сделать выбор, установив переменную состоянияpickerIsOpen
. - «Очистить сеанс»: удалит все ранее выбранные значения из переменной состояния
sessionTime
.
<IonItem>
<IonButton onClick={() => { setPickerIsOpen(true); }} >
Select Session
</IonButton>
<IonButton onClick={() => { setSessionTime(undefined); }}>
Clear Session
</IonButton>
</IonItem>
Затем мы визуализируем еще один IonItem
, где выбор пользователя отображается из переменной состояния sessionTime
, и позволяем пользователю изменить выбор при щелчке элемента, вызывая setPickerIsOpen
для обновления состояния и запуска рендеринга компонента MyPicker
.
<IonItem onClick={() => { setPickerIsOpen(true); }} >
{sessionTime ? (
<IonLabel>
{sessionTime?.weekday} - {sessionTime?.period}
</IonLabel>
) : (
<IonLabel className="placeHolder">Please Select Session</IonLabel>
)}
</IonItem>
Наконец, мы визуализируем фактический компонент MyPicker
, используя переменные состояния и соответствующие функции, переданные как свойства.
В обработчике события onCancel
мы устанавливаем состояние свойства pickerIsOpen
с помощью setPickerIsOpen(false)
.
В onSave
нам нужно установить результаты из MyPicker
в локальное состояние, используя setSessionTime
, а также установить видимость средства выбора setPickerIsOpen(false)
<MyPicker
isOpen={pickerIsOpen}
onCancel={() => {
setPickerIsOpen(false);
}}
onSave={(_value: any) => {
console.log(_value);
let { Day, SessionTime } = _value;
setSessionTime({ weekday: Day.value, period: SessionTime.value });
setPickerIsOpen(false);
}}
/>
Доступен полный исходный код:
О явно инновационном
Clearly Innovative — миноритарный поставщик решений, разрабатывающий цифровые продукты. Мы превращаем идеи в жизнеспособные продукты и превращаем потребности клиентов в передовые технологические решения. Являясь лидером в области раннего внедрения и внедрения передовых технологий, Clearly Innovative предоставляет услуги, ориентированные на стратегию продукта, взаимодействие с пользователем, дизайн и разработку. По словам генерального директора Аарона Сондерса Мы не просто дизайнеры и разработчики, а поставщики комплексных цифровых решений. Clearly Innovative создала программу технического образования Clearly Innovative Education, миссия которой состоит в том, чтобы создать мир, в котором люди из недостаточно представленных слоев общества могут занять место за цифровым столом в качестве создателей, новаторов и предпринимателей.
#БудущееЗаписаноВ Коде
Серия Будущее написано в коде в рамках Инкубатора инклюзивных инноваций предлагает вводные и углубленные занятия по программированию, а также курсы кодирования с упором на бизнес и предпринимательство. Выбор предлагаемого программирования включает в себя кодирование, пользовательский интерфейс / UX, кодирование и бизнес, кодирование и предпринимательство, бизнес-агитацию, предпринимательство: превращение вашей идеи в приложение, и это лишь некоторые из них. Пожалуйста, свяжитесь с [email protected], чтобы узнать больше!