Я учусь Реагировать с этим учебником .И теперь я имею дело с частью SignUp.Я застреваю здесь: должен быть в index.js SignUp, но он "перемещен" в context.js в Firebase.После этого при запуске скрипта я получаю следующее сообщение об ошибке:
Недопустимый тип элемента: ожидается строка (для встроенных компонентов) или класс / функция (для составных компонентов), нополучил: объект.Вероятно, вы забыли экспортировать свой компонент из файла, в котором он определен, или вы перепутали импорт по умолчанию и имена.
Проверьте метод рендеринга Context.Consumer
.
ItКажется, ошибка также связана с index.js в src:
. / src / index.js
src / index.js: 10
7 | import App from './components/App';
8 | import Firebase, { FirebaseContext } from './components/Firebase';
9 |
> 10 | ReactDOM.render(
11 | <FirebaseContext.Provider value={new Firebase()}>
12 | <App />
13 | </FirebaseContext.Provider>,
Я запутался, потому что думал, что FirebaseContext.Provider определен в src / index.js, а FirebaseContext.Consumer уже перемещен в context.js Firebase?В чем здесь проблема и как ее исправить?
Спасибо.
Это index.js SignUp:
import React, { Component } from 'react';
import { Link, withRouter } from 'react-router-dom';
import { withFirebase } from '../Firebase';
import * as ROUTES from '../../constants/routes';
const SignUpPage = () => (
<div>
<h1>SignUp</h1>
<SignUpForm />
//<SignUpForm />
</div>
);
const INITIAL_STATE = {
username: '',
email: '',
passwordOne: '',
passwordTwo: '',
error: null,
};
class SignUpFormBase extends Component {
constructor(props) {
super(props);
}
onSubmit = event => {
const { username, email, passwordOne } = this.state;
this.props.firebase
.doCreateUserWithEmailAndPassword(email, passwordOne)
.then(authUser => {
this.setState({ ...INITIAL_STATE });
this.props.history.push(ROUTES.HOME);
})
.catch(error => {
this.setState({ error });
});
event.preventDefault();
}
onChange = event => {
this.setState({ [event.target.name]: event.target.value });
};
render() {
const {
username,
email,
passwordOne,
passwordTwo,
error,
} = this.state;
const isInvalid =
passwordOne !== passwordTwo ||
passwordOne === '' ||
email === '' ||
username === '';
return (
<form onSubmit={this.onSubmit}>
<input
name="username"
value={username}
onChange={this.onChange}
type="text"
placeholder="Full Name"
/>
<input
name="email"
value={email}
onChange={this.onChange}
type="text"
placeholder="Email Address"
/>
<input
name="passwordOne"
value={passwordOne}
onChange={this.onChange}
type="password"
placeholder="Password"
/>
<input
name="passwordTwo"
value={passwordTwo}
onChange={this.onChange}
type="password"
placeholder="Confirm Password"
/>
<button disabled={isInvalid} type="submit">Sign Up</button>
{error && <p>{error.message}</p>}
</form>
);
}
}
const SignUpLink = () => (
<p>
Don't have an account? <Link to={ROUTES.SIGN_UP}>Sign Up</Link>
</p>
);
const SignUpForm = withFirebase(SignUpFormBase);
export default SignUpPage;
export { SignUpForm, SignUpLink };
Вот код index.js:
import React from 'react';
import ReactDOM from 'react-dom';
import './index.css';
import * as serviceWorker from './serviceWorker';
import App from './components/App';
import Firebase, { FirebaseContext } from './components/Firebase';
ReactDOM.render(
<FirebaseContext.Provider value={new Firebase()}>
<App />
</FirebaseContext.Provider>,
document.getElementById('root'),
);
serviceWorker.unregister();