【问题标题】:Ionic-React multiple selection losing previously selected valuesIonic-React 多项选择丢失先前选择的值
【发布时间】:2021-08-17 13:02:51
【问题描述】:

我对应用程序编程很陌生,所以如果我的问题太基本,请见谅。

形成 ionic-react 中的多项选择功能,我能够提取用户选择的值。但是当用户返回去选择更多的值时,之前选择的值就会消失。

我怎样才能使以前的选择到位?

我提供了一个来自 Ionic 文档的示例。

import React, { useState } from 'react';
import { IonContent, IonItem, IonLabel, IonList, IonListHeader, IonSelect, IonSelectOption, IonPage, IonItemDivider } from '@ionic/react';

const users = [
  {
    id: 1,
    first: 'Alice',
    last: 'Smith'
  },
  {
    id: 2,
    first: 'Bob',
    last: 'Davis'
  },
  {
    id: 3,
    first: 'Charlie',
    last: 'Rosenburg',
  }
];

type User = typeof users[number];

const compareWith = (o1: User, o2: User) => {
  return o1 && o2 ? o1.id === o2.id : o1 === o2;
};

export const ObjectSelection: React.FC = () => {

  const [selectedUsers, setSelectedUsers] = useState<User[]>([]);

  return (
    <IonPage>
      <IonContent>
        <IonList>
          <IonListHeader>
            <IonLabel>
              Objects as Values (compareWith)
            </IonLabel>
          </IonListHeader>
          <IonItem>
            <IonLabel>Users</IonLabel>
            <IonSelect compareWith={compareWith} value={selectedUsers} multiple onIonChange={e => setSelectedUsers(e.detail.value)}>
              {users.map(user => (
                <IonSelectOption key={user.id} value={user}>
                  {user.first} {user.last}
                </IonSelectOption>
              ))}
            </IonSelect>
          </IonItem>
          <IonItemDivider>Selected Users</IonItemDivider>
          {selectedUsers.length ?
            selectedUsers.map(user => <IonItem key={user.id}>{user.first} {user.last}</IonItem>) :
            <IonItem>(none selected)</IonItem>
          }
        </IonList>
      </IonContent>
    </IonPage>
  );
};

【问题讨论】:

    标签: reactjs ionic5


    【解决方案1】:

    我可以看到您直接使用onIonChange={e =&gt; setSelectedUsers(e.detail.value)} 更新了状态,这将直接更改selectedUsers 的值。您首先需要获取 selectedUsers 的值,然后将新值附加到其中。

    onIonChange={e => setSelectedUsers([...selectedUsers, e.detail.value])}
    

    【讨论】:

    • 嘿。我尝试了您的解决方案,但它进入了无限循环(或浏览器停止响应)。
    • 你能用控制台告诉我e.detail.valueselectedUsers 的值是什么。我无法理解结构。
    猜你喜欢
    • 1970-01-01
    • 2015-04-07
    • 1970-01-01
    • 1970-01-01
    • 2021-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多