react-redux 动作创建器在道具上不可用
react-redux action creator not available on props
我正在尝试使用 react-plaid-link 将 plaid 集成到我的应用程序中。一切正常,直到我执行 handleOnSuccess 回调。我收到以下错误消息:
Uncaught TypeError: Cannot read property 'createTransferSource' of undefined
出于某种原因,当我调用 handleOnSuccess
时,从“../../actions”导出的动作创建者不可用
这是我的组件
import React, { Component } from 'react';
import { connect } from 'react-redux';
import { bindActionCreators } from 'redux';
import PlaidLink from 'react-plaid-link';
import * as actions from '../../actions';
const plaidPublicKey = process.env.REACT_APP_PLAID_PUBLIC_KEY;
class PlaidAuthComponent extends Component {
handleOnSuccess(token, metadata) {
// send token to client server
this.props.createTransferSource(metadata);
}
render() {
return (
<div>
<PlaidLink
publicKey={`${plaidPublicKey}`}
product="auth"
env="sandbox"
clientName="plaidname"
onSuccess={this.handleOnSuccess}
/>
</div>
);
}
}
export default connect(null, actions )(PlaidAuthComponent);
来自我的操作文件夹中的 index.js 文件
export * from './transfer_actions';
我的transfer_actions.js文件
export const createTransferSource = (values, callback) => {
return function (dispatch){
axios({
method : 'POST',
url: `xxx/transfer_source.json`,
data: { values }
})
.then(response => {
dispatch({
type: CREATE_TRANSFER_SOURCE,
payload: response
});
})
.then(() => callback())
.catch( error => {
dispatch({
type: CREATE_TRANSFER_SOURCE_ERROR,
payload: error.response
});
});
};
};
我在这里找到了答案:https://github.com/reactjs/react-redux/issues/328
我添加了以下代码
constructor(props){
super(props);
this.handleOnSuccess = this.handleOnSuccess.bind(this);
}
你可以这样写 handleOnSuccess
:
handleOnSuccess = (token, metadata) => {
this.props.createTransferSource(metadata);
}
这样您就可以保留 this
上下文并且不需要构造函数来进行绑定。
您需要绑定 this
否则您会在组件中丢失它。
您可以通过多种方式做到这一点:
方法一:
使用箭头函数
handleOnSuccess = (token, metadata) => {
this.props.createTransferSource(metadata);
}
方法二:
在构造函数中绑定。
constructor(props) {
super(props);
this.handleOnSuccess = this.handleOnSuccess.bind(this);
}
方法三:
在引用 handleOnSuccess
的地方直接绑定。
render() {
return (
<div>
<PlaidLink
publicKey={`${plaidPublicKey}`}
product="auth"
env="sandbox"
clientName="plaidname"
onSuccess={this.handleOnSuccess.bind(this)}
/>
</div>
);
}
方法四:
使用箭头函数
调用 handleOnSuccess
引用
render() {
return (
<div>
<PlaidLink
publicKey={`${plaidPublicKey}`}
product="auth"
env="sandbox"
clientName="plaidname"
onSuccess={() => this.handleOnSuccess}
/>
</div>
);
}
我正在尝试使用 react-plaid-link 将 plaid 集成到我的应用程序中。一切正常,直到我执行 handleOnSuccess 回调。我收到以下错误消息:
Uncaught TypeError: Cannot read property 'createTransferSource' of undefined
出于某种原因,当我调用 handleOnSuccess
时,从“../../actions”导出的动作创建者不可用这是我的组件
import React, { Component } from 'react';
import { connect } from 'react-redux';
import { bindActionCreators } from 'redux';
import PlaidLink from 'react-plaid-link';
import * as actions from '../../actions';
const plaidPublicKey = process.env.REACT_APP_PLAID_PUBLIC_KEY;
class PlaidAuthComponent extends Component {
handleOnSuccess(token, metadata) {
// send token to client server
this.props.createTransferSource(metadata);
}
render() {
return (
<div>
<PlaidLink
publicKey={`${plaidPublicKey}`}
product="auth"
env="sandbox"
clientName="plaidname"
onSuccess={this.handleOnSuccess}
/>
</div>
);
}
}
export default connect(null, actions )(PlaidAuthComponent);
来自我的操作文件夹中的 index.js 文件
export * from './transfer_actions';
我的transfer_actions.js文件
export const createTransferSource = (values, callback) => {
return function (dispatch){
axios({
method : 'POST',
url: `xxx/transfer_source.json`,
data: { values }
})
.then(response => {
dispatch({
type: CREATE_TRANSFER_SOURCE,
payload: response
});
})
.then(() => callback())
.catch( error => {
dispatch({
type: CREATE_TRANSFER_SOURCE_ERROR,
payload: error.response
});
});
};
};
我在这里找到了答案:https://github.com/reactjs/react-redux/issues/328
我添加了以下代码
constructor(props){
super(props);
this.handleOnSuccess = this.handleOnSuccess.bind(this);
}
你可以这样写 handleOnSuccess
:
handleOnSuccess = (token, metadata) => {
this.props.createTransferSource(metadata);
}
这样您就可以保留 this
上下文并且不需要构造函数来进行绑定。
您需要绑定 this
否则您会在组件中丢失它。
您可以通过多种方式做到这一点:
方法一:
使用箭头函数
handleOnSuccess = (token, metadata) => {
this.props.createTransferSource(metadata);
}
方法二:
在构造函数中绑定。
constructor(props) {
super(props);
this.handleOnSuccess = this.handleOnSuccess.bind(this);
}
方法三:
在引用 handleOnSuccess
的地方直接绑定。
render() {
return (
<div>
<PlaidLink
publicKey={`${plaidPublicKey}`}
product="auth"
env="sandbox"
clientName="plaidname"
onSuccess={this.handleOnSuccess.bind(this)}
/>
</div>
);
}
方法四:
使用箭头函数
handleOnSuccess
引用
render() {
return (
<div>
<PlaidLink
publicKey={`${plaidPublicKey}`}
product="auth"
env="sandbox"
clientName="plaidname"
onSuccess={() => this.handleOnSuccess}
/>
</div>
);
}