Actualmente tengo un componente que contiene una matriz de publicaciones, este componente toma un accesorio llamado sortBy que le dice al componente que obtenga datos ordenados por popular o new . La forma en que se configura mi componente es al inicializar, las publicaciones se recuperan y luego se almacenan en redux, solo recibo nuevas publicaciones si mis publicaciones están vacías. De esa manera no estoy buscando constantemente nuevos datos.
const posts = useSelector((state) => state.posts.posts); useEffect(() => { const { sortby } = props; // here I would like to check if props has changed if (Object.keys(posts).length === 0) { dispatch(getPostsAsync(sortby)).then((response) => { setLoading(false); }); } }, [dispatch, props, posts]); Ahora me gustaría verificar si los accesorios sortBy han cambiado de valor. Entonces, originalmente podría ser sortby='-numLikes' pero cuando ordeno 'new', debería ser sortby='-createdAt' después de que cambie, me gustaría decirle a Redux que obtenga nuevos datos.
Todo lo que necesita hacer para obtener el comportamiento que desea es cambiar useEffect a:
const posts = useSelector((state) => state.posts.posts); const { sortby } = props; useEffect(() => { dispatch(getPostsAsync(sortby)).then((response) => { setLoading(false); }); }, [dispatch, sortby]);Luego, useEffect se ejecutará cada vez que se cambie sortby.