尝试在为异步过程设置的redux-thunk函数的调度中使用来自<button>
组件的道具,但我不能完全了解如何使用道具和函数(通过connect
中的react-redux mapDispatchToProps
连接到组件,但我无法弄清楚如何调用道具和函数。
function loadData(dispatch, medium) {
console.log(dispatch)
return dispatch({type: 'LOADING_COMPONENT'})
return axios.get(`/professionals/${medium}`)
.then(res => res.json())
.then(
data => dispatch({ type: 'LOAD_SOME_DATA_SUCCESS', data }),
err => dispatch({ type: 'LOAD_SOME_DATA_FAILURE', err })
);
}
const mapDispatchToProps = (dispatch) => {
return {
LogInClick : () => dispatch(loadData()),
}
}
const LoginButtons = ({props, LogInClick}) => (
<button onClick={() => LogInClick(props.medium)} type="button">{props.buttonName}</button>
)
const LoginConnect = connect(null, mapDispatchToProps)(LoginButtons)
然后我导出它并尝试调用它,以便它可以在渲染文件中重用,如
<LoginConnect medium='suhhhh' buttonName='To log in to suhhh'/>
答案 0 :(得分:1)
function loadData(dispatch, medium) {
console.log(dispatch)
return dispatch({type: 'LOADING_COMPONENT'})
return axios.get(`/professionals/${medium}`)
.then(res => res.json())
.then(
data => dispatch({ type: 'LOAD_SOME_DATA_SUCCESS', data }),
err => dispatch({ type: 'LOAD_SOME_DATA_FAILURE', err })
);
}
const mapDispatchToProps = (dispatch) => {
return {
LogInClick : () => dispatch(loadData()),
}
}
const LoginButtons = ({medium, buttonName, LogInClick}) => (
<button onClick={() => LogInClick(medium)} type="button">{buttonName}</button>
)
const LoginConnect = connect(null, mapDispatchToProps)(LoginButtons)
这应该工作!!实际上连接将mapStateToProps,mapDispatchToProps合并到this.props中。阅读此文档以更好地理解https://github.com/reactjs/react-redux/blob/master/docs/api.md
答案 1 :(得分:0)
尝试返回一个函数,然后 redux-thunk 会以 dispatch 作为参数进行调用。
然后,您可以从返回的函数调用dispatch:
function loadData(medium) {
return (dispatch) => {
dispatch({ type: 'LOADING_COMPONENT' })
axios.get(`/professionals/${medium}`)
.then(res => res.json())
.then(
data => dispatch({ type: 'LOAD_SOME_DATA_SUCCESS', data }),
err => dispatch({ type: 'LOAD_SOME_DATA_FAILURE', err })
)
}
}
您的 LogInClick 函数可以接受一个可以传递到 loadData 的参数:
const mapDispatchToProps = (dispatch) => {
return {
LogInClick: (medium) => dispatch(loadData(medium)),
}
}
const LoginButtons = (props) => (
<button onClick={() => props.LogInClick(props.medium)} type="button">{props.buttonName}</button>
)
我希望这会有所帮助。