【问题标题】:React.js: conditional rendering does not load child componentReact.js:条件渲染不加载子组件
【发布时间】:2020-09-06 09:23:04
【问题描述】:

我需要在条件渲染期间渲染子组件。当前版本不显示。 如果插入到 html 标记中,则没有错误,组件会正常呈现。 条件渲染可能是我的什么错误?

父组件:

  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>
                );
    }

【问题讨论】:

    标签: reactjs


    【解决方案1】:

    您只是将您的子组件有条件地分配给一个局部变量p,您永远不会渲染它。我会像这样改变你的逻辑:

    buttonSubmit=(e)=>{
        let p=(this.state.email===this.data.email && 
          this.state.password===this.data.password) ? 
          <div><Page1/></div>
          : 
          null;
    
        this.setState({p: p});
    
        e.preventDefault()
    }
    
    render() {
        ...
        {this.state.p}
    }
    

    【讨论】:

      猜你喜欢
      • 2021-05-26
      • 2022-09-27
      • 2022-07-30
      • 2018-03-18
      • 1970-01-01
      • 2018-03-03
      • 1970-01-01
      • 2016-06-28
      • 1970-01-01
      相关资源
      最近更新 更多