Tengo una casilla de verificación MUI:
<Checkbox checked={rowValues[row.id]} onChange={() => { const temp = { ...rowValues, [row.id]: !rowValues[row.id] }; setRowValues(temp); }} inputProps={{ 'aria-label': 'controlled' }} />y hay un botón seleccionar todo
<Button onClick={async () => { isAllSelected = !isAllSelected; const tmp = await setAllValues(isAllSelected); setRowValues(tmp); }} size="small" variant="contained" > {isAllSelected ? 'Unselect All' : 'Select All'} </Button> Ambos hacen uso de los valores de rowValues cuya estructura se ve así:
{ 625fd0bc4163c339b4235286: true 627df6084067debf4de42287: true 629a481d848843b1baaf7945: true 6260feb706684d04a43da863: true 62809135dbf57c3ee8d7efd4: true }Código relacionado con el valor predeterminado y la inicialización:
const [rowValues, setRowValues] = useState([]); let temp = []; async function setAllValues(value) { await stableSort(rows, getComparator(order, orderBy)) .slice(page * rowsPerPage, page * rowsPerPage + rowsPerPage) .forEach((row) => { temp = { ...temp, [row.id]: value }; }); console.log('| temp', temp); return temp; } React.useEffect(() => { setAllValues(false).then(setRowValues); }, []);Cuando hago clic en el botón Seleccionar todo, todos los valores de los ID correspondientes se cambian a verdaderos. Ahora, para el accesorio marcado en la casilla de verificación, lo estoy configurando en el valor de la ID correspondiente (ya sea verdadero o falso). En cambio, recibí un error:
index.js:1 Material-UI: un componente está cambiando el estado marcado no controlado de SwitchBase para ser controlado. Los elementos no deben pasar de no controlados a controlados (o viceversa). Decida entre usar un elemento SwitchBase controlado o no controlado durante la vida útil del componente. La naturaleza del estado se determina durante el primer render. Se considera controlado si el valor no es undefined .
Creo que esto sucedió debido al valor del estado inicial, intente cambiar el valor inicial de todas las casillas de verificación a falso en lugar de indefinido, entonces creo que estará bien.
Eso sucede porque su valor inicial es indefinido/nulo. Use '' en su lugar, eso debería resolver el problema