Javascript-форум (https://javascript.ru/forum/)
-   Библиотеки/Тулкиты/Фреймворки (https://javascript.ru/forum/library-toolkit-framework/)
-   -   React.js: Отрисовка по условию (https://javascript.ru/forum/library-toolkit-framework/80982-react-js-otrisovka-po-usloviyu.html)

djekokma 06.09.2020 17:31

React.js: Отрисовка по условию
 
Мне нужно отрисовать по условию дочерний компонент <Page1/>.
В текущей версии моего кода он не отображается. Если вставить в html разметку, то ошибок нет, компонент отрисовывается нормально.
Я думаю, что ошибка - в зоне видимости переменной p,находящейся в функции buttonSubmit. Зону видимости изменить у меня не получается.
Очень нужна помощь.
Спасибо.

Родительский компонент:

export default class App extends Component {
            data = {
                email: "a@b.net",
                password: "adc"
            }
        
            state = {
                email: "",
                password: ""    
            }
        
            emailChange=(e)=>{
                this.setState({email: e.target.value});
                }
            passwordChange=(e)=>{
                this.setState({password: e.target.value});
            }
        
            buttonSubmit=(e)=>{
            let p=this.state.email===this.data.email
            && this.state.password===this.data.password ? <div><Page1/></div> : alert('poi');
                e.preventDefault()
            }
        
            render() {
        
                return (
            <Container component="main" maxWidth="xs">
            <CssBaseline />
                <form  noValidate autoComplete="off"
                onSubmit={this.buttonSubmit}>
                    <div style={{marginTop:"150px"}}>
                        <Grid container spacing={2}>
                            <Grid item xs={12} >
                        <TextField
                                id="outlined-name"
                                label="e-mail"
                                variant="outlined"
                                value={this.state.email}
                                onChange={this.emailChange}/>
                            </Grid>
                                <Grid item xs={12} >
                                <TextField
                                    className="MuiInput-input"
                                    id="outlined-name"
                                    label="password"
                                    variant="outlined"
                                    value={this.state.password}
                                    onChange={this.passwordChange}/>
                                </Grid>
                            <Grid item xs={12}>
                            <Button
                                    style={{width:'210px'}}
                                    type="submit"
                                    fullWidth
                                    variant="contained"
                                    color="primary"
                                    >
                                    Enter
                                </Button>
                                </Grid>    
                                </Grid>
                            </div>
                        </form>
                </Container>
                );
            }
        }


Дочерний компонент:

const Page1 =()=>{
        return (
                <div style={{height: "100vh"}}>
                    <Header/>
                    <Grid container spacing={3}>
                        <Grid item xs={3}>
                            <Paper><ButtonPage/></Paper>
                        </Grid>
                        <Grid item xs={12}>
                            <Paper><ButtonWindow /></Paper>
                        </Grid>
                    </Grid>
                </div>
                );
    }


Часовой пояс GMT +3, время: 13:17.