Skip to content

Async component not rendering on directly open page #86

Open
@Slavenin

Description

@Slavenin

Hi!
I have components:

//OneAreaLayout.js
 import React from 'react';
import PropTypes from 'prop-types';
import Grid from '@material-ui/core/Grid';
import { withStyles } from '@material-ui/core/styles';

import ButtonAppBar from '../Containers/Menu'
import Context from '../Context'

import Login from './AsyncLogin';

const styles = theme => ({
    root: {
        flexGrow: 1,
        maxWidth: '90%',
        margin: 'auto',
        height: '100%'
    },
    paper: {
        padding: theme.spacing.unit * 2,
        textAlign: 'center',
        color: theme.palette.text.secondary,
    },
    form: {
        alignItems: 'center',
        justifyContent: 'center',
        display: 'flex'
    },
    loginBar: {
        height: '100%'
    },
    registerBar: {
        height: '100%'
    }
});

class OneAreaLayout extends React.Component {
    constructor(props) {
        super(props);
        const { classes } = props;

        this.login = this.getLogin(classes);
    }

    getLogin(classes) {
        return (
            <div className={classes.form}>
                <Context.Consumer>
                    {(context) =>
                        <Login
                            user={context.user}
                            setUser={context.setUser}
                            getUser={context.getUser}
                        />}
                </Context.Consumer>
            </div>
        );
    }

    render() {

        const { classes, variant } = this.props;
        const classBar = classes[`${variant}Bar`]
        return (
            <div className={classes.root}>
                <Grid container spacing={16} className={classBar}>
                    <Grid item xs={12}>
                        <ButtonAppBar className={classes.paper} />
                    </Grid>
                    <Grid item xs={12}>
                        {this[variant]}
                    </Grid>
                </Grid>
            </div>
        );
    }
}

OneAreaLayout.propTypes = {
    classes: PropTypes.object.isRequired,
};

export default withStyles(styles)(OneAreaLayout);
//AsyncLogin.js
import React from 'react';
import { asyncComponent } from 'react-async-component';

export default asyncComponent({
    resolve: () =>import('./Login'),
    LoadingComponent: () => <div>Loading...</div>,
    ErrorComponent: ({ error }) => <div>{error.message}</div>
});
//Login.js
import React from 'react';
import LoginForm from '../Components/LoginForm'
import axios from 'axios'
import { Redirect } from 'react-router'

class Login extends React.Component {
    constructor() {
        super();
        this.state = {
            error: null
        };
    }

    submit(values, pristineValues) {
       ...
    }

    render() {
        const {error} = this.state;
        const {user} = this.props
        
        if(user === null)
        {
            return <LoginForm error={error} onSubmit={::this.submit} />
        }

        return <Redirect to="/"/>;
    }
}

export default Login;

if i open login page from main page - async login form open successfully, but if i directly open the page in the browser - all scripts are loaded, but component not showing.

image

image

image

image

image

image

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

      Development

      No branches or pull requests

        Participants

        @Slavenin

        Issue actions

          Async component not rendering on directly open page · Issue #86 · ctrlplusb/react-async-component