Tengo el componente principal Posts.js que asigna cada objeto en la matriz de publicaciones. En esta función, trato de filtrar todas las notas que tienen el mismo post_id que el id del objeto de publicación asignado actual. Todo almacenado en la variable filteredNotes. Luego se lo paso a cada niño. Ahora el problema. Cuando quiero agregar una nueva nota en una publicación específica, la vista no se actualiza (la nueva nota no se agregó a la lista) aunque la base de datos y la tienda redux se actualizaron correctamente. Pero cuando trato de eliminar esa función de filtro, todo funciona bien, así que supongo que el problema principal está ahí. ¿Algúna idea de cómo arreglar esto? Gracias
Publicaciones.js
const posts = useSelector((state) => state.post.posts); const notes = useSelector((state) => state.notes.notes); useEffect(() => { dispatch(getPosts()); dispatch(getNotes()); }, []); const addNoteHandle = (val) => { dispatch(addNote({new_note: val})); } return ( <div className="post__page"> <div className="post__list"> {posts.map((data) => { let filteredNotes = notes.filter((i) => i.post_id === data.id); return <Post data={data} notes={filteredNotes} />; })} </div> <PostForm addNewNote={addNoteHandle} /> </div> );Post.js
export const Post = ({ data, notes }) => { return ( <div className="post__item"> <div className="post__title">{data.title}</div> <div className="post__note"> {notes.map(note => <div>{note.text}</div>)} </div> </div> ); };NoteForm.js
const NoteForm = ({ addNewNote }) => { const [text, setText] = useState(""); return ( <div> <Input value={text} onChange={(e) => setText(e.target.value)} /> <Button type="primary" onClick={() => addNewNote(text)} > <SendOutlined /> </Button> </div> ); };Acción
export const addNote = ({ new_note }) => async (dispatch) => { try { const res = await axios.post("http://localhost:9000/api/note", new_note); dispatch({ type: ADD_NOTE, payload: res.data }); } catch (err) { dispatch({ type: NOTE_FAIL }); } };reductor
case ADD_NOTE: return { ...state, notes: [...state.notes, payload] };use useSelector para obtener el valor del componente de la tienda redux. por alguna razón, el gancho setText no funcionará para actualizar el componente de la página. Tuve un problema similar y no pude encontrar ninguna solución. Este código puede ayudar:
let text =''; text = useSelector((state) => state.yourReducer.text);Ahora muestra tu texto donde quieras, esto solucionará el problema hasta que encuentres una solución real.