GVKun编程网logo

成功执行异步redux动作后过渡到另一条路由(redux异步操作)

8

如果您对成功执行异步redux动作后过渡到另一条路由感兴趣,那么本文将是一篇不错的选择,我们将为您详在本文中,您将会了解到关于成功执行异步redux动作后过渡到另一条路由的详细内容,我们还将为您解答r

如果您对成功执行异步redux动作后过渡到另一条路由感兴趣,那么本文将是一篇不错的选择,我们将为您详在本文中,您将会了解到关于成功执行异步redux动作后过渡到另一条路由的详细内容,我们还将为您解答redux异步操作的相关问题,并且为您提供关于Android – 如何将一条路径叠加在另一条路径之上、React-Redux:动作必须是普通对象。使用自定义中间件进行异步操作、React-Redux:动作必须是普通对象使用自定义中间件进行异步操作、reactjs – Redux:从另一个动作创建者那里调用一个动作的有价值信息。

本文目录一览:

成功执行异步redux动作后过渡到另一条路由(redux异步操作)

成功执行异步redux动作后过渡到另一条路由(redux异步操作)

我有一组非常简单的react组件:

  • container挂接到redux并处理操作,存储订阅等
  • list 显示我的物品清单
  • new 这是一种将新项目添加到列表的形式

我有一些反应路由器路由,如下所示:

<Route name=''products'' path=''products'' handler={ProductsContainer}>  <Route name=''productNew'' path=''new'' handler={ProductNew} />  <DefaultRoute handler={ProductsList} /></Route>

以便显示listform而不显示两者。

我想做的是,一旦成功添加了新项目,就让应用程序重新路由到列表。

到目前为止,我的解决方案是.then()在async之后设置a dispatch

dispatch(actions.addProduct(product)  .then(this.transitionTo(''products'')))

这是执行此操作的正确方法,还是应该以某种方式触发其他操作以触发路线更改?

答案1

小编典典

如果您不想使用像Redux Router这样的更完整的解决方案,则可以使用Redux History
Transitions,它可以让您编写如下代码:

export function login() {  return {    type: LOGGED_IN,    payload: {      userId: 123    }    meta: {      transition: (state, action) => ({        path: `/logged-in/${action.payload.userId}`,        query: {          some: ''queryParam''        },        state: {          some: ''state''        }      })    }  };}

这与您的建议相似,但稍微复杂一点。它仍然在后台使用相同的历史库,因此与React
Router兼容。

Android – 如何将一条路径叠加在另一条路径之上

Android – 如何将一条路径叠加在另一条路径之上

我目前有以下代码:

private void drawGreen(Canvas canvas) {


    greenPaint.setColor(0xFF00AA00);

    if (start) {
        greenPath = new Path();
        greenPath.reset();
        greenPath.moveto(pathArrayX.get(0),pathArrayY.get(0));
        start = false;
    }

    if (isInsideCircle(pathArrayX.get(pathIndex),pathArrayY.get(pathIndex),curX,curY,TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,25,getResources().getdisplayMetrics()))) {
        greenPath.lineto(pathArrayX.get(pathIndex),pathArrayY.get(pathIndex));
        canvas.drawPath(greenPath,greenPaint);
        pathIndex++;

    }


}

private boolean isInsideCircle(float x,float y,float centerX,float centerY,float radius) {
    return Math.pow(x - centerX,2) + Math.pow(y - centerY,2) < Math.pow(radius,2);
}

在我的应用程序中,我首先绘制一条红色路径,其坐标存储在ArrayLists pathArrayX和pathArrayY中.我正在跟踪在鼠标下移动的圆形ImageView的X和Y坐标,并且当用户从头到尾悬停在路径上时,我希望用绿色路径覆盖红色路径.当用户盘旋在红色路径上时,他们已经完成的红色路径的部分将被沿着相同段的绿色路径覆盖. ImageView(curX和curY)的X和Y坐标是从正在运行的线程计算的.

但是,我的应用程序似乎根本没有绘制绿色路径.我在这里做错了吗?

解决方法

这个功能甚至被调用了吗?

假设它在onDraw(Canvas)中被调用,看起来它可能缺少循环的外部代码.看到你最后在做pathIndex,你使用的是while循环吗?如果你只是要循环遍历点,那么使用for循环,因为如果忘记增加计数器或做错误,或者在多个地方执行,while循环更容易陷入无限循环.

附注:如果布尔开始标志仅用于懒惰地初始化greenPath,则应该废弃它并使用if(greenPath == null){作为一般做法.使用可以直接从对象推断的状态,如果可以帮助它,则不使用标志,这使代码更清晰.

React-Redux:动作必须是普通对象。使用自定义中间件进行异步操作

React-Redux:动作必须是普通对象。使用自定义中间件进行异步操作

未处理的拒绝(错误):动作必须是普通对象。使用自定义中间件进行异步操作。

我想在每个帖子中添加评论。因此,当获取帖子运行时,我想为所有帖子调用获取评论API。

export function bindComments(postId) {
  return API.fetchComments(postId).then(comments => {
    return {
      type: BIND_COMMENTS,comments,postId
    }
  })
}

React-Redux:动作必须是普通对象使用自定义中间件进行异步操作

React-Redux:动作必须是普通对象使用自定义中间件进行异步操作

未处理的拒绝(错误):动作必须是普通对象。使用自定义中间件进行异步操作。

我想在每个帖子中添加评论。因此,当获取帖子运行时,我想为所有帖子调用获取评论API。

export function bindComments(postId) {
  return API.fetchComments(postId).then(comments => {
    return {
      type: BIND_COMMENTS,comments,postId
    }
  })
}

reactjs – Redux:从另一个动作创建者那里调用一个动作

reactjs – Redux:从另一个动作创建者那里调用一个动作

我正在开发一个Redux应用程序,其中许多过滤器组件可以改变要执行的搜索的性质.每当其中一个过滤器组件的状态发生变化时,我想重新运行搜索操作.但是,我似乎无法正确地调用每个过滤器组件的搜索操作.

这是主要的搜索操作:

// actions/search.js
import fetch from ''isomorphic-fetch'';
import config from ''../../server/config'';

export const receiveSearchResults = (results) => ({
  type: ''RECEIVE_SEARCH_RESULTS'',results
})

export const searchRequestFailed = () => ({
  type: ''SEARCH_REQUEST_Failed''
})

export const fetchSearchResults = () => {
  return (dispatch,getState) => {
    // Generate the query url
    const query = getSearchQuery();  // returns a url string
    return fetch(query)
      .then(response => response.json()
        .then(json => ({
          status: response.status,json
        })
      ))
      .then(({ status,json }) => {
        if (status >= 400) dispatch(searchRequestFailed())
        else dispatch(receiveSearchResults(json))
      },err => { dispatch(searchRequestFailed()) })
  }
}

当我从连接的React组件调用它时,fetchSearchResults工作正常.但是,我无法从以下操作创建者调用该方法(这是过滤器操作创建者之一):

// actions/use-types.js
import fetchSearchResults from ''./search'';

export const toggleUseTypes = (use) => {
  return (dispatch) => {
    dispatch({type: ''TOGGLE_USE_TYPES'',use: use})
    fetchSearchResults()
  }
}

运行它会产生:未捕获的TypeError:(0,_search2.default)不是函数.当我在toggleUseTypes中运行dispatch(fetchSearchResults())时也会发生同样的情况.

我肯定犯了一个新手错误 – 有谁知道如何解决这个问题并从actions / use-types.js动作调用fetchSearchResults方法?我非常感谢其他人可以提出的关于这个问题的建议!

解决方法

我看到2个错误

>您正在错误地导入fetchSearchResults函数

>这是TypeError _search2.default的来源.
>未捕获的TypeError:(0,_ search2.default)不是函数

>您正在错误地调度fetchSearchResults操作/ thunk

错误1:导入错误

// This won''t work. fetchSearchResults is not the default export
import fetchSearchResults from ''./search'';
// Use named import,instead.
import {fetchSearchResults} from ''./search'';

错误2:操作使用不正确

// This won''t work,it''s just a call to a function that returns a function
fetchSearchResults()
// This will work. dispatching the thunk
dispatch(fetchSearchResults())

我们今天的关于成功执行异步redux动作后过渡到另一条路由redux异步操作的分享就到这里,谢谢您的阅读,如果想了解更多关于Android – 如何将一条路径叠加在另一条路径之上、React-Redux:动作必须是普通对象。使用自定义中间件进行异步操作、React-Redux:动作必须是普通对象使用自定义中间件进行异步操作、reactjs – Redux:从另一个动作创建者那里调用一个动作的相关信息,可以在本站进行搜索。

本文标签: