相关疑难解决方法(0)

如何使用超时调度Redux操作?

我有一个更新我的应用程序的通知状态的操作.通常,此通知将是某种错误或信息.我需要在5秒后发送另一个操作,将通知状态返回到初始状态,因此不会发出通知.这背后的主要原因是提供通知在5秒后自动消失的功能.

我没有运气使用setTimeout和返回另一个动作,也无法找到如何在线完成.所以欢迎任何建议.

javascript timeout redux

829
推荐指数
11
解决办法
36万
查看次数

在Redux Thunk中使用getState是一种很好的做法吗?

我在其他问题中看到了相互矛盾(或者只是让我感到困惑)关于getState在一个动作中使用是否可接受的答案,而且我已经看过很多次它被称为反模式.对我来说,它似乎工作得很好,但如果我们不使用它,最好的做法是什么getState

getState在一个thunk中使用来过滤当前连接到某些模拟数据并被拉入应用程序状态的用户数组.

这是我的行动代码:

export const accountLogInSuccess = user => ({
    type: types.ACCOUNT_LOG_IN_SUCCESS,
    user,
});

export const accountLogOutSuccess = () => ({
    type: types.ACCOUNT_LOG_OUT_SUCCESS,
});

export const accountCheckSuccess = () => ({
    type: types.ACCOUNT_CHECK_SUCCESS,
});

export const accountCheck = () => (
    (dispatch, getState) => {
        dispatch(ajaxCallBegin());
        return apiAccount.accountCheck().then((account) => {
            if (account) {
                const user = findByUID(getState().users, account.uid);
                dispatch(accountLogInSuccess(user));
                toastr.success(`Welcome ${user.nameFirst}!`);
            } else {
                dispatch(accountLogOutSuccess());
            }
            dispatch(accountCheckSuccess());
        }).catch((error) => {
            dispatch(ajaxCallError(error));
            toastr.error(error.message);
            throw (error); …
Run Code Online (Sandbox Code Playgroud)

getstate redux redux-thunk

23
推荐指数
1
解决办法
1万
查看次数

Redux thunk - 如何防止它发出不必要的 API 请求?

我有这样的 action.js 文件:

import axios from 'axios';

export const SEARCH_TERM = 'SEARCH_TERM';
export const SAVE_SEARCH = 'SAVE_SEARCH';

export function search(query) {
  const githubApi = `https://api.github.com/search/repositories?q=${query}&sort=stars&order=desc`;
  const request = axios.get(githubApi);
  return (dispatch) => {
    request.then(({ data: dataFromGithub }) => {
      dispatch({ type: SEARCH_TERM, payload: query });
      dispatch({ type: SAVE_SEARCH, payloadOne: query, payloadTwo: dataFromGithub });
    });
  };
}
Run Code Online (Sandbox Code Playgroud)

使用减速器,我将用户输入的所有搜索词保存到 redux 中。然后我向 github api 发出请求并保存响应数据。

现在我遇到了一个问题,我真的不知道如何处理。

我如何编写代码来检查用户之前是否已经搜索过此查询,在这种情况下,我的应用程序不会向 github api 触发该请求。

我该如何做到这一点以及我应该将这个逻辑放在哪里?有任何想法吗?


编辑:感谢@klugjo!由于他的提示,我编写了确实有效的代码。

import React, { Component } from 'react';
import { connect } …
Run Code Online (Sandbox Code Playgroud)

javascript api node.js redux-thunk react-redux

5
推荐指数
1
解决办法
1997
查看次数

React-redux 与 thunk - getState 不是函数

我目前收到错误 TypeError: getState is not a function 我正在尝试类似于http://redux.js.org/docs/advanced/AsyncActions.html中的示例的操作

action.js - 此处发生错误

export const fetchCategoriesIfNeeded = (dispatch, getState) => {
    if(shouldFetchCategories(getState())){
        return dispatch(fetchCategories())
    }
}
Run Code Online (Sandbox Code Playgroud)

应用程序.js

  componentDidMount(){
    this.props.dispatch(fetchCategoriesIfNeeded())
  }
Run Code Online (Sandbox Code Playgroud)

...

const mapStateToProps = (state, props) => {
  return {
    isFetching: state.isFetching,
    categories: state.categories
    }
}
Run Code Online (Sandbox Code Playgroud)

减速器.js

function data (state = initialState, action){
    switch(action.type){
        case RECEIVE_CATEGORIES:
            return {
                ...state,
                isFetching: false,
                categories: action.categories
            }
        case REQUEST_CATEGORIES:
            return {
                ...state,
                isFetching: true
            }
        default:
            return state
    }
    return state
}
Run Code Online (Sandbox Code Playgroud)

为了可读性省略了一些代码。

我也尝试过这个并收到 …

javascript asynchronous getstate react-redux

4
推荐指数
1
解决办法
3003
查看次数

在 Redux 中,如何让状态生效?

在下面的示例中,从 firebase 获取数据后,我想添加 redux 存储中已经存在的用户对象并将其附加到所有消息对象中。请求你帮忙。

问题:

  1. 这是在动作创建者中访问状态的好方法吗?如果是,如何?
  2. 如果没有,有哪些替代方案?
db.collection(`messages/${documentId}/chat`)
  .get()
  .then(snapshot => {
    const messages = [];
    snapshot.docs.forEach(doc => {
    console.log("message", doc.id, doc.data());
    messages.push({
      id: doc.id,
      from: doc.data().from,
      to: doc.data().to,   
      text: doc.data().text,
      timestamp: doc.data().timestamp.seconds * 1000
    });
  });
  dispatch({ type: GET_CHAT, payload: messages });
});
Run Code Online (Sandbox Code Playgroud)

react-native redux react-redux

3
推荐指数
1
解决办法
5351
查看次数

在 Redux 操作中访问状态

我有一个具有以下状态的 Redux 减速器:

const INITIAL_STATE = {
  permissions: [''],
  authzError: null
};
Run Code Online (Sandbox Code Playgroud)

我已经有一些修改 state.permissions 的 Redux 操作。我正在编写以下操作来运行权限检查:

export function isAuthz(allowed, except) {
  // I need state.permissions here
  ...
}
Run Code Online (Sandbox Code Playgroud)

我知道我可以这样做:

export function isAuthz(allowed, except, permissions) {
  // Now do permission check
  ...
}
Run Code Online (Sandbox Code Playgroud)

但这意味着将 state.permissions 拉出组件中,然后将其放入 isAuthz 操作中,这似乎是一种浪费且容易出错。我可以只检查减速器中的权限,但我认为一个动作是我应该这样做的地方。

我应该在哪里进行此权限检查以及如何获取 state.permissions ?

谢谢,

沃伦

reactjs react-native redux react-redux

0
推荐指数
1
解决办法
4452
查看次数