Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何将状态传递给动作创建者_Javascript_Reactjs_Redux - Fatal编程技术网

Javascript 如何将状态传递给动作创建者

Javascript 如何将状态传递给动作创建者,javascript,reactjs,redux,Javascript,Reactjs,Redux,我想知道如何将状态传递到操作中,以便它可以使用状态进行API调用。我想传递的状态是输入,因为它是发送到Clarifai服务器以预测名人的图像URL。句柄搜索负责将状态更新到URL 我试着在没有运气的情况下使用get state 这是我的行动 export const requestPrediction = () => { return function (dispatch, getState) { dispatch(fetchCelebrequest) let inpu

我想知道如何将状态传递到操作中,以便它可以使用状态进行API调用。我想传递的状态是输入,因为它是发送到Clarifai服务器以预测名人的图像URL。句柄搜索负责将状态更新到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,因为我的更新是异步的。
您可以查看此链接

但是,状态不是来自组件,是不是应该来自组件?在您的示例中,您希望从何处获取状态以将其传递给分派?在大多数情况下,它来自组件:例如,用户单击按钮。是的,因此,当用户单击按钮时,它会更新redux存储中的输入状态,我不确定如何从我的操作访问该状态。通常的流程是当用户单击时,使用setState更新状态,然后将其发送到存储(例如,来自handleClick函数)。分派此值后,您可以从MapStateTops访问它。您可以使
requestPrediction
成为
input
的函数,而不是使用
getState
来选择输入值。将输入的状态保持在组件的本地,组件将调用
分派(requestPrediction(input))