繁体   English   中英

如何将 state 传递到我的 action creator

[英]How do I pass state into my action creator

我想知道如何将 state 传递到一个动作中,以便它可以使用 state 拨打 API 电话。 我要传递的 state 是输入,因为它是图像 URL 被发送到 Clarifai 的服务器以预测名人。 handle search负责将state更新为URL。

我试过使用 get state 没有运气

这是我的行动

export const requestPrediction = () => {
  return function (dispatch, getState) {
    dispatch(fetchCelebrequest)
    let input = getState().input 
    app.models.predict(Clarifai.CELEBRITY_MODEL,
      input)
      .then(res => {
        const data = res.outputs[0]['data']['regions'][0]['data'].concepts[0]
        dispatch(fetchCelebSuccess(data))
      })
      .catch(err => {
        const error = err.message
        dispatch(fetchCelebFailed(error))
      })
  }
}

这是我的 reducer.js

import { 
    CHANGE_SEARCHFIELD,
    REQUEST_PREDICTION_PENDING,
    REQUEST_PREDICTION_SUCESS,
    REQUEST_PREDICTION_FAILED
} from './constants'


const initialState = {
    input: '',
    imageUrl: '',
    box: {},
    isSignedIn: false,
    isPending: false,
    celeb: {},
    error: '',
    celebConfidence: [],
    user: {
    id: '',
    name: '',
    email: '',
    entries: 0,
    joined: ''
    }
}

export const handleSearch = (state=initialState, action={}) => {
    switch (action.type) {
        case CHANGE_SEARCHFIELD:
            return { ...state, input: action.payload }
        default:
            return state
    }
}

export const requestPrediction = (state=initialState, action={}) => {
    switch(action.type) {
        case REQUEST_PREDICTION_PENDING:
            return {...state, isPending: true}
        case REQUEST_PREDICTION_SUCESS:
            return {...state, celebName: action.payload, isPending: false}
        case REQUEST_PREDICTION_FAILED:
            return {...state, error: action.payload, isPending: false}
        default:
            return state
    }
}

正确的方法是通过 setState,因为更新是异步的。 您可以查看此链接。 如何将 state 传递给 React.js 中的操作?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM