Heim > Web-Frontend > js-Tutorial > Hauptteil

So implementieren Sie die Listensortierung in React

藏色散人
Freigeben: 2022-12-27 09:59:46
Original
3036 Leute haben es durchsucht

So implementieren Sie die Listensortierung in React: 1. Setzen Sie das Ganze in eine ungeordnete Liste und platzieren Sie die Unterelemente in li; Liste.

So implementieren Sie die Listensortierung in React

Die Betriebsumgebung dieses Tutorials: Windows 10-System, Reaktionsversion 18.0.0, Dell G3-Computer.

Benutzerdefinierte per Drag & Drop sortierte Liste reagieren

1. Hintergrund

Bei der Entwicklung im Unternehmen bin ich kürzlich auf die Notwendigkeit gestoßen, das Formular anzupassen, und die Radio- und Prüfoptionen im benutzerdefinierten Formular müssen angepasst werden Vom Benutzer angepasst. Definieren Sie die Drag-and-Drop-Sortierung. Schreiben Sie nach einer Woche der Durchsicht verschiedener Materialien und Praktiken eine Zusammenfassung!

So implementieren Sie die Listensortierung in React

2. Üben

Nach einer Reihe von Abfragen habe ich festgestellt, dass React Sortable und Array-Move diese Funktion erreichen können! Im Anhang finden Sie den offiziellen Website-Link unsere Korrespondenz, indem wir daraus lernen Die offizielle Website zum Thema Anforderungsentwicklung!

Für die Umsetzung sind drei Hauptkomponenten erforderlich.

1.

SortableContainer Ein Container, der Bewegung als Ganzes realisiert

<sortablecontainer>
    {
     radioList.map((item,index)=>{
         return(
             <sortableitem></sortableitem>
            )
        })
    }
</sortablecontainer>
Nach dem Login kopieren
Wir setzen das Ganze in eine ungeordnete Liste und platzieren die Unterelemente in li, um unsere Sortierung zu erleichtern!

  const SortableContainer = sortableContainer(({children}) => {
  return 
Nach dem Login kopieren
    {children}
;onSortEnd Funktion, die nach Abschluss der Bewegung ausgeführt wird

 const onSortEnd = ({oldIndex, newIndex}) => {
    var arry1 = arrayMoveImmutable(radioList,oldIndex,newIndex)
    setRadioList(arry1);
  };
Nach dem Login kopieren
Nach dem Login kopieren

useDragHandle

Steuerung zum Verschieben (Fokus) --- Sie müssen es nicht schreiben, wenn Sie es nicht benötigen

  const DragHandle = sortableHandle(() => <unorderedlistoutline></unorderedlistoutline>);
Nach dem Login kopieren
<br>
Nach dem Login kopieren
Nach dem Login kopieren
2
  const SortableItem = sortableElement(({item,num}) => (
    
Nach dem Login kopieren

  •              {         item.value = e.target.value         console.log(item.value);         setRadioList([...radioList])}}         readOnly = {isEdit == true ? '':'none'}>                {deleteRadio(item)}} style = {{position:'absolute',right:'10px',top:'10px',display:isEdit == true ? '':'none'}}/>          
  •   )); Das Objekt muss selbst konstruiert werden. Da es hier mehr Elemente gibt, sieht es komplizierter aus.

    Unsere Anforderung ist, Radio in Radio.Group zu verschieben. Kapseln Sie Radio also in SortableItem.

    Unter diesen können die akzeptierten Parameter angepasst werden, sie müssen jedoch den Namen in

    entsprechen und der Index kann nicht als Parametername verwendet werden.

    3. arrayMoveImmutable-Array-Neuordnungsfunktion

     const onSortEnd = ({oldIndex, newIndex}) => {
        var arry1 = arrayMoveImmutable(radioList,oldIndex,newIndex)
        setRadioList(arry1);
      };
    Nach dem Login kopieren
    Nach dem Login kopieren

    arrayMoveImmutable-Funktion akzeptiert 3 Parameter, einer ist das Array der Operation, einer ist der ursprüngliche Index des Operationselements und der andere ist der Index, an dem das neue Operationselement platziert wird. Die Funktion gibt das verschobene Array zurück.

    3. Gesamteffekt

    Also, unsere Operationsschritte sind vorbei, der Gesamtcode. Pakete, die nicht importiert werden, müssen von npm selbst installiert werden!

    import React, { useState,useEffect } from "react";
    import { Input,Radio, Button,Space,Checkbox,Form  } from "antd";
    import { DeleteOutline, CloseCircleOutline,UnorderedListOutline } from 'antd-mobile-icons'
    import { Dialog, Toast, Divider } from 'antd-mobile'
    import {
      sortableContainer,
      sortableElement,
      sortableHandle,
    } from 'react-sortable-hoc';
    import {arrayMoveImmutable} from 'array-move';
    
    const RadioComponent = (props) => {
      const {onDelete,onListDate,componentIndex,setIsEdit,isEdit,componentTitle,componentDate,previewVisible} = props;
      const [radioList,setRadioList] = useState([])
      const [remark, setRemark] = useState(false)
      const [required, setRequired] = useState(false)
      const [radioTitle, setRadioTitle] = useState('')
      const [id, setId] = useState(2)
      const [radioId, setRadioId] = useState(111211)
      useEffect(()=>{
        if(componentDate !== undefined){
          setRadioList(componentDate)
        }else{
          setRadioList([{id:0,value:''},{id:1,value:''}])
        }
      },[componentIndex])
    
      useEffect(()=>{
        if(isEdit === false && previewVisible === undefined){
          onListDate(radioList,radioTitle,required,remark) 
        }
      },[isEdit])
    
      const onChange = (e) => {
        console.log(e.target.value);
        setRequired(e.target.checked)
      };
      // 添加备注
      const addRemark = ()=>{
        setRemark(true)
      }
      // 删除备注
      const deleteRemark = ()=>{
        setRemark(false)
      }
      // 删除选项
      const deleteRadio = (item)=>{
        console.log(item);
        if(radioList.indexOf(item) > -1){
          radioList.splice(radioList.indexOf(item),1)
        }
        setRadioList([...radioList])
      }
    
      const SortableItem = sortableElement(({item,num}) => (
        
    Nach dem Login kopieren
  •              {         item.value = e.target.value         console.log(item.value);         setRadioList([...radioList])}}         readOnly = {isEdit == true ? '':'none'}>                {deleteRadio(item)}} style = {{position:'absolute',right:'10px',top:'10px',display:isEdit == true ? '':'none'}}/>          
  •   ));   const onSortEnd = ({oldIndex, newIndex}) => {     var arry1 = arrayMoveImmutable(radioList,oldIndex,newIndex)     setRadioList(arry1);   };    const DragHandle = sortableHandle(() => <unorderedlistoutline></unorderedlistoutline>);   const SortableContainer = sortableContainer(({children}) => {   return 
      {children}
    ; });     return(       
            *           {componentIndex} [单选]         {setRadioTitle(e.target.value);}} readOnly = {isEdit == true ? '':'none'} >                                         {               radioList.map((item,index)=>{                 return(                                    )               })             }                             
              备注                    
            
                       |                  
            必填          {           const result = await Dialog.confirm({             content: '是否确定删除该题目?',           })           if (result) {             Toast.show({ content: '点击了确认', position: 'bottom' })             onDelete(componentIndex)           } else {             Toast.show({ content: '点击了取消', position: 'bottom' })           }           }} style={{float:'right',margin:'10px'}}  />         
            
          
          )    } export default RadioComponent
    <br>
    Nach dem Login kopieren
    Nach dem Login kopieren

    So implementieren Sie die Listensortierung in React

    Empfohlenes Lernen: „

    Video-Tutorial reagieren

    Das obige ist der detaillierte Inhalt vonSo implementieren Sie die Listensortierung in React. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

    Verwandte Etiketten:
    Quelle:php.cn
    Erklärung dieser Website
    Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
    Beliebte Tutorials
    Mehr>
    Neueste Downloads
    Mehr>
    Web-Effekte
    Quellcode der Website
    Website-Materialien
    Frontend-Vorlage
    Über uns Haftungsausschluss Sitemap
    Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!