как получить посты по идентификатору в редуксе - PullRequest
0 голосов
/ 22 января 2020

Я пытаюсь получить все сообщения в соответствии с userId. Я не уверен, как заставить работать logi c, где его можно будет восстановить во всем приложении.

Я хочу иметь возможность вызывать селектор getUserPosts и иметь возможность повторять его для пользователя страница профиля, как мне это сделать?

это то, что у меня есть

селекторы

export const getPosts = () => // this gets all posts
    createSelector(
        postSelector,
        (state) => state.posts,
    );
export const getUserPosts = () =>  // how i do i get all posts based on user id i pass state here 
    createSelector(
        postSelector,
        (state) => state.posts.filter((user) => user.userId === state.id)
    )

контейнер

import { connect } from "react-redux";
import { createStructuredSelector } from "reselect";
import Profile from "./../components/Profile/Profile"
import { getUserPosts } from "./../selectors/selectors";
const mapStateToProps = createStructuredSelector({
    userPosts: getUserPosts()
});

export default connect(
    mapStateToProps,
    null,
)(Profile);

редуктор

import produce from "immer";
import * as types from "../actionTypes/postActionTypes";
import { validation } from '../utils';
export interface postState {
  posts: any[];
  postPage: any;
  error: any;
  titleError: any;
  bodyError: any;
  title: string
  postContent: string

}

const initialState: postState = {
  posts: [],
  postPage: {},
  titleError: null,
  bodyError: null,
  title: "",
  postContent: "",
  error: null
};

const postReducer = (state = initialState, action: any): postState =>
  produce(state, (draft) => {
    switch (action.type) {
      case types.GET_POSTS_SUCCESS:
        draft.posts = action.payload;
        return;
    }
  });

export default postReducer;

1 Ответ

1 голос
/ 22 января 2020

Вы можете передать идентификатор пользователя в функцию выбора в качестве параметра

export const getUserPosts = (state, userId) => 
  createSelector(
    postSelector,
    state => state.posts.filter(user => user.userId === userId)
  )

и использовать хук useSelector в Reaction-redux. Таким образом, в компоненте, в котором вы хотите отобразить их, при условии, что у вас есть идентификатор пользователя в виде проп

import { useSelector } from 'react-redux'
import { getUserPosts } from "./../selectors/selectors"

const Profile = props => {
  const { userId } = props
  const posts = useSelector(state => getUserPosts(state, userId)
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...