Данные Firebase не работают при обновлении веб-браузера - PullRequest
0 голосов
/ 25 мая 2018

Спасибо за чтение.

У меня проблема с React, Redux и Firebase.Я установил данные Firebase в хранилище React с Redux.Передайте данные с mapStateToProps в компоненте.Когда я добавляю ссылку на элемент firebase и обновляю веб-браузер, реквизиты данных не определены.Я хочу, чтобы при обновлении браузера оставались данные Firebase.

Это мой компонент, который отображает данные FireBase

 render() {
    return (
      <div>
        <div className="content-container">
          <Header />
          <div className="square-top" />
          <div className="square" />
          <div className="middle-square" />

          <div className="box-content" style={{ marginTop: "20rem" }}>
            <img
              className="img-post"
              src={this.props.posts.image}
              alt=""
            />
            <h1>{this.props.posts.title}</h1>
            <p>{this.props.posts.description}</p>
          </div>
          <div className="box-content" style={{ paddingBottom: "400px" }}>
            <button
              onClick={() => {
                this.props.history.push("/blog");
              }}
              className="btn-primary"
            >
              Volver
            </button>
          </div>
        </div>
        <Footer />
      </div>
    );
  }
}

const mapStateToProps = (state, props) => {
  return {
    posts: state.posts.find(post => post.slug === props.match.params.slug)
  };
};

export default connect(mapStateToProps)(PostItemPage);

action Redux file

export const setPosts = posts => ({
  type: "SET_POSTS",
  posts
});

export const startSetPosts = () => {
  return dispatch => {
    return database
      .ref("posts")
      .once("value")
      .then(snapshot => {
        const posts = [];

        snapshot.forEach(childSnapshot => {
          posts.push({
            id: childSnapshot.key,
            ...childSnapshot.val()
          });
        });

        dispatch(setPosts(posts));
      });
  };
};

иХранить файл

const composeEnhancers  = window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ || compose

export default () => {
  const store = createStore(
    combineReducers({
      filters: filtersReducer,
      questions: questionsReducer,
      posts: postsReducer
    }),
    composeEnhancers(applyMiddleware(thunk))
  );

  return store;
};

Ответы [ 2 ]

0 голосов
/ 25 мая 2018

Привет, Чарльз, извини, я начинаю с React и Firebase, и мой английский не очень хорош.Я отправляю startSetPosts () в мои App.js следующим образом.

const jsx = (
  <Provider store={store}>
    <AppRouter />
  </Provider>
);

store.dispatch(startSetPosts());


ReactDOM.render(jsx, document.getElementById("app"));

О props.match.params.slug Я передаю значение из родительского компонента с помощью mapStateToProps ().

const mapStateToProps = state => ({
  posts: selectCategory(state.posts, state.filters),
  filters: state.filters.category
});

Я получаю данные из firebase с такой структурой:

posts{
  -LDCSkdmgh2F3FjmcoSp{
       description:
       image:
       slug:
       title: 
   }
}
0 голосов
/ 25 мая 2018

Вы не предоставили достаточно информации, чтобы кто-нибудь мог дать вам полный ответ.

Несколько моментов для рассмотрения:

  • Какое значение имеет props.match.params.slug?Правильно ли вы передаете это из родительского компонента?
  • Вы вызываете startSetPosts(), возможно, в методе componentWillMount() вашего контейнерного компонента?
  • Пробовали ли вы регистрировать состояние, которое находится в вашемхранить, в тот момент, когда ваш контейнерный компонент отображается?Это, без сомнения, поможет вам отладить, когда что-то идет не так.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...