Die Anzeige und der Wert können nicht aktualisiert werden, wenn auf den MUI-Schalter geklickt wird.
<p>Ich habe Probleme mit dem Kippschalter der Material-Benutzeroberfläche, den ich in meinem aktuellen Projekt verwende. Wenn die Komponente geladen wird und ich den Wert in der Konsole protokolliere, ist der Anfangswert korrekt. Wenn ich jedoch auf den Schalter von „Ja“ auf „Nein“ klicke, zeigt der Schalter korrekt an, dass „Nein“ ausgewählt ist und die Konsolenprotokollierung erneut ausgelöst wird, aber der Wert zeigt immer noch „Ja“ an. Wenn ich erneut auf den Schalter klicke und versuche, ihn wieder auf „Nein“ umzustellen, wird der Schalter einfach erneut gerendert, ohne ihn umzudrehen, die Konsolenprotokollierung wird erneut ausgelöst und der Wert wird nun auf „Nein“ aktualisiert.Im Grunde legt der erste Klick den Schalter um und der zweite Klick dreht den Wert um. Ich habe denselben Kippschalter bereits zuvor ohne Probleme verwendet. Kann mir also jemand sagen, was ich reparieren muss, damit der Schalter und der Wert beim Klicken umgeschaltet werden? </p>
<p><strong>Eingabeänderungen verarbeiten:</strong></p>
<pre class="brush:php;toolbar:false;">const handleInputChange = e =>
const { Name, Wert } = e.target;
setValues({
...Werte,
[name]: ( typeof value === 'string' ? (value).replace(/ +(?= )/g, '').trimStart() : value )
// Wenn der Wert eine Zeichenfolge ist, entfernen Sie führende Leerzeichen und mehrere Leerzeichen
});
};</pre>
<p><strong>Switch aus Formular aufgerufen: </strong></p>
<pre class="brush:php;toolbar:false;"><ToggleSwitch
onChange={handleInputChange}
label1='Nein'
label2='Ja'
name='useForCalcs'
value={values.useForCalcs}
/></pre>
<p><strong>ToggleSwitch-Komponente:</strong></p>
<pre class="brush:php;toolbar:false;">import * as React from 'react';
import {Box, Switch, Typography} aus '@material-ui/core';
Standardfunktion ToggleSwitch(props) exportieren {
const { label1, label2, name, onChange, value} = props;
const [checked, setChecked] = React.useState(false);
const convertToEventParams = (name, value) => ({ target: { name, value } });
const curValue = value === 1 ? true : false;
const handleSwitch = e => { setChecked(e.target.checked };
React.useEffect(() => { setChecked(curValue); }, [curValue]); // Den Kippschalter jedes Mal neu rendern, wenn sich der überprüfte Wert ändert
const handleChecked = e =>
handleSwitch(e);
onChange(convertToEventParams(name, (checked === false ? 1 : 0))); // True/False in 1/0-Wert konvertieren
};
zurückkehren (
<Box>
<Typografie>
{label1}
{<Umschalten
name={name}
checked={checked}
value={checked}
onChange={handleChecked}
inputProps={{'aria-label': 'switch'}}
/>}
{label2}
</Typografie>
</Box>
);
}</pre>
<p><br /></p>