Einzelauswahl von Karten in React


Kassandra

Ich bin ein Anfänger bei React und versuche, eine Einzelauswahl auf meinen Karten zu implementieren, bei der nur eine Karte gleichzeitig ausgewählt werden kann und die ausgewählte Karte hervorgehoben wird. Das ist meine borderCard-Komponente

export const BorderCard = styled.div`
  width: 100%;
  box-sizing: border-box;
  background: ${(props) =>
    props.selected ? "#E8F1FF" : "#FFFFFF"};
  border: ${(props) =>
      props.selected ? "1.5px solid #2375A4" : "1px solid #d5dde3"}
`;

Diese BorderCard wird dann in meiner PaymentCard-Komponente verwendet

const PaymentCard = ({ option }) => {
  
  return (
    <BorderCard style={{ marginTop: "10px"}} selected  >
      
      <Row>
        <StatusHead style={{ fontWeight: 500 }}>{option.optionText}</StatusHead>
        <StatusHead>₹ {formatAmount(option.totalPayable)}</StatusHead>
      </Row>
   </BorderCard>
  );
};

Und schließlich werden all diese Zahlungskarten nacheinander anhand von Karten dargestellt.

return ( 
    <ScrollableBox>
           {paymentOptions.map((option, index) => (
                <PaymentCard key={index} option ={option} onChange = {() => setisSelected(index)}
                />
              ))}
     </ScrollableBox>
           <Row style={{ marginTop: "15px", alignItems: "flex-start" }}>
                <BsExclamationCircle
                  style={{
                    fontSize: "20px",
                    paddingTop: "2px",
                    margin: "0 8px",
                  }}
                />
                <SubText>
                  {paymentOptions.length > 0
                    ? paymentOptions[0].lateChargeText
                    : ""}
                </SubText>
              </Row>
};

Ich habe prop selected in der BorderCard-Komponente aufgerufen und bei der Übergabe in der PaymentCard-Komponente werden alle Karten statt einer ausgewählt. Zweitens habe ich in der endgültigen Rückgabeanweisung PaymentOptions[0] hart codiert, wo es auf dem aktuell ausgewählten Array-Element (dh Karte) basieren sollte. Aus diesem Grund kann ich die findIndex () -Methode verwenden, um den Index der derzeit ausgewählten Karte abzurufen, aber ich kann keine Funktion für handleSelection schreiben und die ausgewählte Requisite in meiner BorderCard-Komponente entsprechend verwenden. Soll ich stattdessen einen Staat verwenden, um die ausgewählte Karte zu speichern? Bitte helfen Sie mir, dies zu verstehen.

const handleSelection = ;
const selectedIndex = paymentOptions.findIndex(handleSelection);

Bildbeschreibung hier eingeben

lissettdm

Sie müssen selectedund onChangeals Eigenschaften übergeben in PaymentCard:

const PaymentCard = ({ option, selected, onChange }) => {
  
  return (
    <BorderCard style={{ marginTop: "10px"}} selected={selected}  >
      
      <Row onClick={onChange}>
        <StatusHead style={{ fontWeight: 500 }}>{option.optionText}</StatusHead>
        <StatusHead>₹ {formatAmount(option.totalPayable)}</StatusHead>
      </Row>
   </BorderCard>
  );
};

Dann nach isSelectedWert als ausgewählt markieren :

const [isSelected, setisSelected] = useState(null);

//...
{paymentOptions.map((option, index) => (
     <PaymentCard key={index} option ={option} selected={isSelected === index} onChange = {() => setisSelected(index)}/>
))}

Sie können die ausgewählte Option mit dem isSelected-Wert abrufen:

<SubText>
   {paymentOptions.length > 0 && isSelected
       ? paymentOptions[isSelected].lateChargeText
       : ""}
</SubText>

Arbeitsbeispiel

Verwandte Artikel


Stapeln von Karten in React Native

Unglaublich Momentan lerne ich Natives Reagieren und habe ein Problem beim Stapeln der Karten. Hier ist mein Code: constructor(props) { super(props); const position = new Animated.ValueXY(); const panResponder = new PanResponder.create({ on

Dynamisches Rendern von Karten in React Semantic UI

user4396386 Ich habe meinen Redux-Speicher Requisiten zugeordnet, aber jetzt habe ich Probleme, ihn dynamisch zu rendern. Ich habe auch projectCards(){...}Syntax ausprobiert , aber das war ein totaler Schuss im Dunkeln. In meinen Konsolenprotokollen werden die

Verwenden von React zum Erstellen von Karten mit AmMaps

VInay Singh Ich verwende ReactJs, um eine USA-Karte mit der AmCharts-Bibliothek zu erstellen. Was ich genau will, ist Folgendes: https://www.amcharts.com/demos/us-heat-map/ . Wenn Sie den Code auf der Geige überprüfen, werden Sie feststellen, dass sie eine sep

Modellierungsliste von Karten in openapi

liotur Ich muss ein Objekt aus einer *.yaml-Definitionsdatei generieren. Mein Endziel ist generiertes POJO wie im folgenden Beispiel: public class MyGeneratedPojo { private List<Map<String, MyInternalObject>> internalProperties; } Ich weiß, dass ich zusä

Bootstrap - Anpassen von Karten

JQuery Mobile Ich arbeite an einer App, die Bootstrap 4 Alpha verwendet. Ich versuche einige Karten zu erstellen . Ich versuche, etwas nachzubilden, das auf dieser Site wie eine Kurskarte aussieht . Ich versuche jedoch, das Standard-Bootstrap-Styling zu verwen

Verwendung von Karten in "Dialog"

Bruno Klein Ich versuche, die fließende API zu verwenden, um einen einfachen Ablauf zu erstellen. Aber anstatt einfachen Text zu verwenden, möchte ich reichhaltige visuelle Komponenten verwenden. Hier ist ein Beispiel. public async Task<HttpResponseMessage

Clojure Array von Karten

Chris Edwards Ich versuche, diese Art von Daten in zu modellieren Clojure name: foo data: bar name: stack data: overflow name: tess data: ting Ich habe überlegt, eine Karte zu verwenden, aber Sie können dort keine doppelten Schlüssel haben, damit das ni

Iterieren von Karten in Scala

Turm Nehmen wir an, ich habe ein Array von Karten: val m1 = Map("key" -> Array("aa","bb"), "v1" -> 1 , "v2" -> 3) val m2 = Map("key" -> Array("cc","bb"), "v1" -> 2 , "v2" -> 4) val colection = Array(m1,m2) Ich möchte eine neue Sammlung erstellen, val

Ionische Auswahlliste von Karten

alifnaiech Ich versuche, eine Liste von Kategorien durch Klicken auszuwählen. Wenn ich klicke, muss sich die Hintergrundfarbe ändern und wenn ich ein weiteres Mal auf dieselbe klicke, muss der Hintergrund zur Standardfarbe zurückkehren. Ich muss in der Lage se