Kategorien
Allgemein React

useState und useEffect

Zusammenfassung

  • useEffect initial : useEffect(…, [] )
  • lazy State: setState( () => {} … )
  • Das setState bspw. setData wird synchron einmalig aufgerufen
  • useEffect wird asynchron einmalig aufgerufen
  • im useEffect Fall muss mit nicht vorhandenen Daten umgegangen werden können, da erst nach dem rendenr useEffect aufgerufen wird
    • nach dem rendern wird useEffect aufgerufen, hat Daten verfügbar
    • über Seiteneffekt wird Komponente neu gerendert, wenn useState Änderung bemerkt
const [data, setData] = useState();

useEffect( ()=> {
      setData( {...data})
});

Kategorien
Allgemein React

useEffect

Mit useEffect führen wir Code aus, nachdem die Komponenten gerendert, also im DOM erzeugt wurden.

useEffect( () => doStuff() ); // erwartet eine Funktion
useEffect( () => doStuff(), [] ); //2 Parameter optional übergibt Dependencies

Wird der 2 Parameter übergeben, kann damit gesteuert werden, wann die Funktion ausgeführt wird. Andernfalls wird die Funktion bei jedem rendern ausgeführt!!!

Das ist bei Schnittstellenanfragen natürlich nicht immer gewünscht, jedes mal alle Daten anzufragen.Mit dem 2ten Parameter den Dependencies, kann man das steuern.

useEffect Hook

  • asynchrone Ausführung, d.h. Anwendung wird nicht blockiert
  • Code wird nach rendern der Komponente ausgeführt
  • kein Rückgabewert
  • über Seiteneffekte arbeiten ( Übergabe von geänderten Werten an den State), der dann ein Neurendern der Komponenten auslöst
  • geeignet für
    • langlaufende Berechnungen
    • Schnittstellenkommunikation (bspw. REST)
    • PUB-SUB-PATTERN
  • Dependies (Abhängikeiten), nur bei Änderung der Abhängikeiten wird useEffect ausgelöst
  • intital sind alle Abhängikeiten „neu“, d.h. es werden alle useEffect ausgelöst

3 Möglichkeiten Abhängkeiten zu übergeben

  • ohne Parameter – Ausführung erfolgt bei jedem rendern
    useEffect( () => doStuff());
  • leere Liste (leeres Array) – Ausführung erfolgt nur initial
    useEffect( () => doStuff(), [] );
  • mit 1 oder mehrerer Abhängikeiten – Ausführung nur bei Änderung mindestens 1 Abhängikeit
    useEffect( () => doStuff(), [count] );

Kategorien
Allgemein React

Altes und neues React

Altes React

  • Verwaltung in Klassen
  • nur 1 pro Komponente möglich

Neues React

  • Verwaltung in Funktionen
  • mehrere States pro Komponente möglich
Kategorien
React

useState

useState Hooks halten den State (Datenstand) und aktualisieren Ihn. Sie werden beim erstellen und rendern der Komponente aktualisiert.

useState ist für Number, String und kleine Objekte

  • setState( ()=>{}) wird synchron aufgerufen
Normale Aktualisierung
  • Ausgabe erfolgt synchron
//Übergabe als Objekt, erzeugt mit Spread-Operator eine Kopie, UI //wird immer aktualisiert, da immer neue Kopie bei Aufruf 
// erstellt wird
<input type="button" onClick={

     setData( {...data})
}

//Übergabe als Objekt, UI wird nicht aktualisiert, da Data-Obj da 
//data Objekt bekannt und react reagiert nur auf Änderungen
<input type="button" onClick={

     setData(data);
}
Funktionale Aktualisierung (empfehlenswert)
  • Ausgabe erfolgt asynchron (Konsolenausgabe daher evlt. unterschiedliche Abfolge)
  • „Stale State“ (Zustand der nicht aktuell ist), kann verhindert werden
  • immer verwenden, gerade wenn Zustände von einander abhängig sind
<p>Funktionale Aktualisierung</p>
 
   <input type="button" onClick={ ()=> setData( prev => { 
            
            return {...prev}; 

   })} value="5 - Funktionale Aktualisierung / Neues Objekt ohne Änderungen"></input>



   <input type="button" onClick={ ()=> setData( prev => { 
                    
             return prev; 
                    
   })} value="6 - Funktionale Aktualisierung / gleiches Objekt ohne Änderungen"></input>


 <input type="button" onClick={ ()=> setData( prev => { 
                    
             prev.first = prev.first +"7";
             return prev;
                   
 })} value="7 - Funktionale Aktualisierung / Original Objekt mit Änderungen"></input>

Lazy intital State

Einmaliges lazy loading, wenn die Komponente erzeugt wird. Zum Beispiel Berechnungen die nur einmal geladen werden sollen.

Lebt solange die Komponente lebt.

//hier wird eine Funktion ausgeführt ……mit ()=>{}
const [data, setData] = useState(()=>{ return [ ….]}) // OK

//hier wird das Ergebnis einer Funktion übergeben, das geht nicht, initData würde bei jedem rendern der Komponente ausgeführt werden
const [data, setData] = useState(initData()) // Nicht OK


// Lazy Intialization State - einmalig beim rendern wird der State initialisiert bspw. für Berechnungen
// die für die Komponente bereitstehen sollen
export function LazyStateTest(){
    console.log("---called LazyStateTest---");

    const [show, setShow] = useState(false);

    
    return (<Fragment>
        <p>Lazy State Initialisierung - wenn Komponente eingeblendet wird</p>
        <input type="button" onClick={()=>setShow(prev=> !prev)} value="toggle"></input>
        { show && <LazySate/>}
        { !show && <p>Komponente ausgeblendet</p>}
    </Fragment>);
}

function LazySate(){
    console.log("---called LazyState---");

    const [count, countState] = useState(1)
    const [data, setData] = useState(()=>{


        console.log("--lazy state init");

        return [
            { name:"Name1", age:42},
            { name:"Name2", age:32},
            { name:"Name3", age:14},
            { name:"Name4", age:13},

        ]
    })


    return (<>
        <p>Konsole öffnen um Ausgabe zu sehen</p>

        {data && data.map((entry,key)=>{
            
            return <p key={key}>
            <span>{entry.name}</span><span>{entry.age}</span>
            </p>})}
    </>);
}


Kategorien
Allgemein Linux

FTP Centos

Installing and configuring the FTP server

Let’s install the vsftpd package.

dnf install vsftpd

Now start the service.

systemctl start vsftpd

And add it to autorun.

systemctl enable vsftpd

Open the /etc/vsftpd/vsftpd.conf file.
Check these parameters to make sure they have the correct values. We currently prohibit anonymous login and allow it for local users. FTP recording is also allowed.

anonymous_enable=NO
local_enable=YES
write_enable=YES

Find and uncomment this line to restrict access to everything except the home directory.

chroot_local_user=YES

And add this line to the end of the file to grant access to change and write files via FTP.

allow_writeable_chroot=YES

Now save and close the file and open /etc/pam.d/vsftpd. Comment this line in it:

#auth required pam_shells.so

If you use firewalld add the FTP service to it.

firewall-cmd --permanent --add-service=ftp
firewall-cmd --reload

Restart the FTP service.

systemctl restart vsftpd

Creating a user for FTP access

Create a new user and set the password for it.

useradd newftpuser
passwd newftpuser

To prevent it from logging in via ssh, change its shell.

usermod --shell /sbin/nologin newftpuser

Kategorien
Linux

Sicheres Kopieren von Daten

Verzeichnisse und Unterverzeichnisse werden über SSH auf einen anderen Webspace transferiert

scp -r htdocs/dev/shared/ username@domain:htdocs/dev/shared/

Weil SCP das SSH-Protokoll nutzt, um die Dateien verschlüsselt von Server zu Server zu übertragen, können auch sensible Daten auf diese Weise transferiert werden. SSH hat als kryptographisches Netzwerkprotokoll den Zweck, das Versenden von Ordnern und Dateien über potentiell unsichere Netzwerke sicher zu gestalten und dabei die Echtheit und Integrität der übermittelten Dateien sicherzustellen.

Kategorien
Linux

Rename all files

Rename all files in current diretory
Quelle: hier

find . -name '*.JPG' -exec sh -c 'mv "$0" "${0%.JPG}.jpg"' {} \;