Estoy tomando datos de singlePost de Redux y convirtiéndolos en una matriz usando Object.keys.
Sin embargo, cuando el renderizado está en progreso, singlePost se recibe tarde, por lo que cuando trato de console.log, se registra nulo al principio y luego ingresan los datos correctos.
Así que este error se imprime.
No se puede convertir indefinido o nulo en objeto
este es mi codigo
const Explain = ({navigation, route}) => { const {singlePost} = useSelector((state) => state.post); console.log("singlePost:",singlePost); // singlePost: null first recorded // singlePost: // singlePost = { // User: { // id: 3, // nickname: "bill", // }, // content1: "number1", // content2: "number2", second recorded // content3: "bye", // content4: "empty", // content5: "empty", // content6: "empty", // content7: "empty", // content8: "number3", // content9: "empty", // content10: "empty", // }; const contentOnly = Object.keys(singlePost) return ( ); }; export default Explain;¿Cómo puedo solucionar este error? ¿Puedo usar el encadenamiento opcional en el objeto?
¿Cómo puedo arreglar mi código?
No hay necesidad de encadenamiento opcional. El encadenamiento opcional solo es útil cuando se accede a una propiedad de un objeto posiblemente nulo y está llamando a una función con el objeto como argumento.
Podría estar pensando en el operador coalescente nulo , que le da un valor diferente si el que está bajo inspección es nulo o indefinido, que posiblemente podría usar aquí a través de:
const contentOnly = Object.keys(singlePost ?? {});Sin embargo, diría que es una forma bastante indirecta de obtener una matriz vacía. Simplemente usaría un operador ternario o condicional :
const contentOnly = singlePost == null ? [] : Object.keys(singlePost); Esto les dice a los lectores exactamente lo que van a obtener, especialmente si establece singlePost en nulo de forma predeterminada.
puede verificar el typeof de la variable y si es nula o no, como se muestra a continuación:
const contentOnly = (typeof singlePost === 'object' && singlePost !== null) ? Object.keys(singlePost): []En su caso, puede verificar si singlePost está definido:
const contentOnly = Object.keys(singlePost || {}) // or if(singlePost && typeof singlePost == 'object') {...do something}Si necesita un encadenamiento opcional (según el título de la pregunta). puedes hacer algo como esto
singlePost && singlePost.content1 // or with new syntax singlePost?.content1Preste atención: la nueva sintaxis no es compatible con todos los entornos