React.Как заполнить форму после завершения входа в систему - PullRequest
1 голос
/ 09 мая 2019

У меня есть два реагирующих компонента (RegistrationDetails.js, BasicInformation.js).RegistrationDetails, очевидно, несет ответственность за регистрацию пользователя, он получит информацию о пользователе из формы и отправит ее на сервер через axios.

На стороне сервера (серверная часть), если пользователь уже существует, сервер затем соберет оставшуюся информацию, такую ​​как имя, отчество и т. Д., И затем отправит ее обратно для сбора на стороне клиента.,

Возвращаясь к клиентской части, теперь оставшаяся пользовательская информация, которая была возвращена, затем сохраняется в центральном хранилище с использованием редукционных редукторов, а затем страница «перенаправляется» в BasicInformation.js

* 1006.* Теперь в BasicInformation.js затем выполняется mapStateToPros, так что у меня будет доступ к информации, которая была сохранена в центральном хранилище, но тогда это станет проблемой: я изо всех сил пытаюсь показать оставшуюся информацию.Это звучит довольно просто, но я попробовал много вещей на componentDidUpdate и на методе рендеринга, но безуспешно.

Пожалуйста, найдите код ниже и дайте мне знать, если у вас есть какие-либо идеи.

import React, {Component} from 'react';
import classes from './SignUp.module.css';
import {connect} from 'react-redux'
import * as actions from '../../store/actions/index';
import Spinner from '../../components/UI/Spinner/Spinner'

class SignupDetails extends Component {

    constructor(props) {
        super(props)
        this.state = {
            email: '',
            password: ''
        };

        this.handleInputChange = this.handleInputChange.bind(this);
    }

    handleInputChange(event) {
        const target = event.target;
        const value = target.type === 'checkbox' ? target.checked : target.value;
        const name = target.name;

        this.setState({
            [name]: value
        });
    }

    postDataHandler = () => {
        const data = {
            username: this.state.email,
            email: this.state.email,
            password: this.state.password
        };
        this.props.onSignupDetails(data);
    }

    componentDidMount() {
        this.props.history.push({pathname: '/signup_details/'})
    }

    componentDidUpdate() {
        if (this.props.signup_details_success)
            this.props.history.push({pathname: '/basic_information/'})
    }

    render() {
        let errorMessage = null;
        if (this.props.error) {
            errorMessage = (
                <p>{this.props.signup_details_response}</p>
            );
        }

        return (
            <div>
                <Spinner show={this.props.loading}/>
                <div className={classes.SignUpForm}>
                    {errorMessage}
                    <h3>Take your first step.</h3>

                    <div>
                        <input
                            key="email"
                            name="email"
                            value={this.state.email}
                            onChange={this.handleInputChange}/>
                    </div>

                    <div>
                        <input
                            key="password"
                            name="password"
                            value={this.state.password}
                            onChange={this.handleInputChange}/>
                    </div>

                    <button className={classes.OkButton} onClick={this.postDataHandler}>Next</button>
                </div>
            </div>

        );
    }
}

const mapStateToProps = state => {
    return {
        signup_details: state.signup.signup_details,
        signup_details_success: state.signup.signup_details_success,
        signup_details_response: state.signup.signup_details_response,
        loading: state.signup.loading,
        error: state.signup.error
    };
};

const mapDispatchToProps = dispatch => {
    return {
        onSignupDetails: (signup_details) => dispatch(actions.signupDetails(signup_details))
    };
};

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



-----



import React, {Component} from 'react';
import classes from './SignUp.module.css';
import {connect} from 'react-redux'
import * as actions from '../../store/actions/index';
import Spinner from '../../components/UI/Spinner/Spinner'

class BasicInformation extends Component {

    constructor(props) {
        super(props)
        this.state = {
            first_name: '',
            middle_name: '',
            last_name: '',
            mobile_number: '',
            fund_balance: ''
        }
        this.handleInputChange = this.handleInputChange.bind(this);
    }

    handleInputChange(event) {
        const target = event.target;
        const value = target.type === 'checkbox' ? target.checked : target.value;
        const name = target.name;

        this.setState({
            [name]: value
        });
    }

    postDataHandler = () => {
        const data = {
            username: this.state.email,
            email: this.state.email,
            first_name: this.state.first_name,
            middle_name: this.state.middle_name,
            last_name: this.state.last_name,
            mobile_number: this.state.mobile_number,
            sfunds: [{balance: this.state.fund_balance}]
        };

        this.props.onSignupBasicInformation(data);
    }

    componentDidUpdate() {
        if (this.props.signup_basic_information_success)
            this.props.history.push({pathname: '/personal_information/'})
    }

    render() {
        let errorMessage = null;
        if (this.props.error) {
            errorMessage = (
                <p>{this.props.signup_basic_information_response}</p>
            );
        }

        return (
            <div>
                <Spinner show={this.props.loading}/>
                <div className={classes.SignUpForm}>
                    {errorMessage}
                    <h3>First we need some basic information</h3>

                    <div><input
                        key="first_name"
                        name="first_name"
                        value={this.state.first_name}
                        onChange={this.handleInputChange}/></div>
                    <div><input
                        key="middle_name"
                        name="middle_name"
                        value={this.state.middle_name}
                        onChange={this.handleInputChange}/></div>
                    <div><input
                        key="last_name"
                        name="last_name"
                        value={this.state.last_name}
                        onChange={this.handleInputChange}/></div>
                    <div><input
                        key="mobile_number"
                        name="mobile_number"
                        value={this.state.mobile_number}
                        onChange={this.handleInputChange}/></div>
                    <div><input
                        key="fund_balance"
                        name="fund_balance"
                        value={this.state.fund_balance}
                        onChange={this.handleInputChange}/></div>

                    <button className={classes.OkButton} onClick={this.postDataHandler}>Next</button>
                </div>
            </div>

        );
    }
}

const mapStateToProps = state => {
    return {
        signup_details_success: state.signup.signup_details_success,
        signup_details_response: state.signup.signup_details_response,

        signup_basic_information: state.signup.signup_basic_information,
        signup_basic_information_success: state.signup.signup_basic_information_success,
        signup_basic_information_response: state.signup.signup_basic_information_response,

        loading: state.signup.loading,
        error: state.signup.error
    };
};

const mapDispatchToProps = dispatch => {
    return {
        onSignupBasicInformation: (basic_information) => dispatch(actions.signupBasicInformation(basic_information))
    };
};

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

1 Ответ

0 голосов
/ 16 мая 2019

В случае, если кому-то интересно, мне удалось решить эту проблему с помощью componentDidMount, чтобы установить локальное состояние.

componentDidMount(){
    if(this.props.smsf_member_details) {
        this.setState({
            first_name: this.props.smsf_member_details.first_name,
            last_name: this.props.smsf_member_details.last_name,
            middle_name: this.props.smsf_member_details.middle_name,
        });
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...