如果我需要先显示自定义提示,如何使用条件正确渲染 React 组件?

How do I properly render React components using conditionals if I need to show custom prompt first?

我正在制作需要 2 个值(名称和城市)才能呈现的天气预报应用程序。这就是为什么我想在加载后首先在网站上显示一个弹出窗口。然后,如果用户输入正确的城市 - 主要组件出现在弹出窗口的位置。我想使用像 Sweetalert2 这样的外部库,但它不允许双重输入。

我编写了这个使用提取和条件的组件,但它不起作用。如果 promise 成功解决,它应该更改状态“验证”以触发渲染另一个组件,但是当“this.setState({ validation: true })”存在时,promise 发送“错误消息”而不是“成功”,仅此而已发生

import React from 'react'
import App from './App.js';


class InputBox extends React.Component {
    constructor(props) {
        super(props);
        this.state = {
            name: "",
            cityValue: "",
            errorMessage: "",
            key: 'x',
            validation: false
        }
        this.handleChange = this.handleChange.bind(this);
        this.handleSubmit = this.handleSubmit.bind(this);
    }

    handleChange(event) {
        this.setState({ cityValue: event.target.value })
    }
    handleSubmit(event) {


        fetch('https://api.openweathermap.org/data/2.5/weather?q=' + this.state.cityValue + '&appid=' + this.state.key)
        .then(function (resp) {
            return resp.json()
        })    
        .then(function (data) {
                if (data) {
                   
                      //  this.setState({ validation: true }) // if this is present, there is "error message" in console
                        console.log("success")
                    
                }
            })
            .catch(function () {
                console.log("error message")
                
            });


    }

    render() {
        let content
        if (this.state.validation == false) {
            content = <form
                onSubmit={
                    (e) => {
                        e.preventDefault();
                        this.handleSubmit(this.state.cityValue);
                    }
                }
            >


                <input type="text" value={this.state.cityValue} onChange={this.handleChange} />
                <input type="submit" value="Send" />
            </form>
        } else {
            content = <App city={this.state.cityValue} />
        }

        return (
            <div>
                {content}
            </div>

        );
    }

}

export default InputBox

使用条件渲染。

您可以尝试以下任意一种方式在react中实现条件渲染:

  1. 使用 if…else 语句
  2. 使用 switch 语句
  3. 使用元素变量
  4. 使用三元运算符
  5. 使用逻辑 &&(短路评估)
  6. 使用立即调用的函数表达式 (IIFE)
  7. 使用增强的 JSX 库

参考 React 文档中的条件渲染:https://reactjs.org/docs/conditional-rendering.html

可以使用三元运算符(?:)实现条件渲染

render() {
    return {this.state.validation == false?(
        <form
            onSubmit={
                (e) => {
                    e.preventDefault();
                    this.handleSubmit(this.state.cityValue);
                }
            }
        >
            <input type="text" value={this.state.cityValue} onChange={this.handleChange} />
            <input type="submit" value="Send" />
        </form>):

        (<App city={this.state.cityValue} />)
}}