gpt4 book ai didi

javascript - Redux thunk 函数未运行

转载 作者:行者123 更新时间:2023-11-30 11:36:07 26 4
gpt4 key购买 nike

我有一个返回 redux thunk 异步函数的函数。问题是它没有开火。 createUser 函数正在运行,因为其中的第一个 console.log 语句正在运行,但 redux thunk 函数中的语句没有。我不完全确定为什么?我可以尝试的事情有什么想法吗?这同样适用于我的 native react 应用程序,所以不确定为什么它在这里不起作用。

这是 createUser 函数。

export function createUser (userData) {

console.log('Getting here?')

return function (dispatch, getState) {
dispatch(authenticating());

console.log('But are you getting heeeere?')

const email = userData.email;
const password = userData.password;

firebaseAuth.createUserWithEmailAndPassword(email, password).catch((error) => {
// Handle Errors here.
var errorCode = error.code;
var errorMessage = error.message;
console.log(errorMessage);
}).then(() => {
const user = firebaseAuth.currentUser;

db.ref('/users/' + user.uid).set({
username: userData.username,
displayName: userData.displayName,
uid: user.uid
})
dispatch(isAuthed());

}).catch((error) => {
console.warn('Error in createUser callback', error)
});
}
}

还有我的设置

import React from 'react';
import ReactDOM from 'react-dom';
import { createStore, applyMiddleware, combineReducers } from 'redux';
import { Provider } from 'react-redux';
import thunk from 'redux-thunk';
import { App } from '~/components/App';
import registerServiceWorker from './registerServiceWorker';
import * as reducers from '~/redux';
import './index.css';

const store = createStore(
combineReducers(reducers),
applyMiddleware(thunk)
)

ReactDOM.render(
<Provider store={store}>
<App />
</Provider>,
document.getElementById('root'));
registerServiceWorker();

最后,这是我发送的 SignUp 组件。

import React, { Component } from 'react';
import { connect } from 'react-redux';
import PropTypes from 'prop-types';
import { createUser } from '~/redux/modules/authentication';
import './SignUp.css';

class SignUp extends Component {
static propTypes = {
dispatch: PropTypes.func.isRequired
}
constructor(props) {
super(props);

this.state = {
username: '',
displayName: '',
email: '',
password: '',
confirmPasswordText: ''
}
}
handleUsernameChange = (event) => {
this.setState({username: event.target.value});
}
handleDisplayNameChange = (event) => {
this.setState({displayName: event.target.value});
}
handleEmailChange = (event) => {
this.setState({email: event.target.value});
}
handlePasswordChange = (event) => {
this.setState({password: event.target.value});
}
handleConfirmPasswordChange = (event) => {
this.setState({confirmPasswordText: event.target.value});
}
stopDefault = (event) => {
event.preventDefault();
createUser(this.state);
}
render () {
return (
<div className="sign-up">
<div>
<h1>Nimbus</h1>
</div>
<form onSubmit={this.props.dispatch(this.stopDefault())}>
<div className="form-group">
<label>Username</label>
<input
type="text"
className="sign-up__input form-control"
id="formGroupExampleInput"
placeholder="Choose a username"
onChange={this.handleUsernameChange}
/>
</div>
<div className="form-group">
<label>Display Name</label>
<input
type="text"
className="sign-up__input form-control"
id="formGroupExampleInput2"
placeholder="Choose a display name"
onChange={this.handleDisplayNameChange}
/>
</div>
<div className="form-group">
<label>Email</label>
<input
type="email"
className="sign-up__input form-control"
id="formGroupExampleInput3"
placeholder="Enter your email address"
onChange={this.handleEmailChange}
/>
</div>
<div className="form-group">
<label>Password</label>
<input
type="password"
className="sign-up__input form-control"
id="formGroupExampleInput4"
placeholder="Password"
onChange={this.handlePasswordChange}
/>
</div>
<div className="form-group">
<label>Confirm password</label>
<input
type="password"
className="sign-up__input form-control"
id="formGroupExampleInput4"
placeholder="Password"
onChange={this.handleConfirmPasswordChange}
/>
</div>
<button type="submit" className="sign-up__button btn btn-
primary btn-lg">Sign Up</button>
</form>
</div>
);
}
}

export default connect()(SignUp);

最佳答案

您需要使用从 react-redux 导入的 connect 函数来使 createUser 函数作为 prop 对组件可用,而不是直接使用导入的函数。如果您不这样做,那么您调用的函数不会连接到您的 redux 存储,因此返回的函数(thunky 函数)将不会被执行。

import React, { Component } from 'react';
import { connect } from 'react-redux';
import PropTypes from 'prop-types';
import { createUser } from '~/redux/modules/authentication';
import './SignUp.css';

class SignUp extends Component {
static propTypes {
createUser: React.PropTypes.func.isRequired
}

stopDefault = (event) => {
event.preventDefault();
this.props.createUser(this.state);
}

// Rest of component
}

const mapStateToProps = null;
const mapDispatchToProps = {
createUser
}

export default connect(
mapStateToProps,
mapDispatchToProps
)(SignUp);

关于javascript - Redux thunk 函数未运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44339618/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com