javascript - 输入表单后 react 条件显示/隐藏不起作用

标签 javascript reactjs

提前感谢您的帮助。我试图制作基于 const results 显示按钮的组件,但是当我插入: Balaton 时,它仅在我向字符串插入另一个字符后才显示。所以字符串是 ```Balatons``

import React from 'react';
import { BrowserRouter, Link as Router, Route, Link } from 'react-router-dom';

//STYLES
import './Search.css'; 

// COMPONENTS
import Gallery from '../Gallery/Gallery';
import Present from '../Present/Present';

const results = ["Balaton", "Zamardi", "Sound", "Madarsko", "Sziget", "Hungary"]

class Search extends React.Component {
        state = {
            input: '',
            showButton: false
        };

    onInput = (event) => {
        this.setState({
            input: event.target.value})
        console.log(this.state.input)
        console.log(this.state.submit)

        // Conditional input to render button
        if (results.indexOf(this.state.input) > -1) {
            this.setState({
                showButton: true
            })
        } else {
            this.setState({
                showButton: false
            })
        }
    }

    // TODO
    // Handling submit event
    onSubmit = (event) => {
        console.log(this.state.submitted);
        event.preventDefault()
    }


    render() {

            return(
                    <div>
                        <form className="search-form" onSubmit={this.onSubmit}>
                            <input 
                                type="text" 
                                value={this.state.input} 
                                placeholder="Our great memory" 
                                onChange={this.onInput}
                            />
                        {this.state.showButton && <button>Button</button>}
                        </form>
                    </div>)

        }
}

export default Search;

最佳答案

setState 是异步方法,因此当您测试 this.state.input 时,您会得到旧值。 尝试使用这个:

// ....
onInput = (event) => {
    const eventValue = event.target.value;
    this.setState({
        input: eventValue })
    console.log(eventValue )
    console.log(this.state.submit)

    // Conditional input to render button
    if (results.indexOf(eventValue) > -1) {
        this.setState({
            showButton: true
        })
    } else {
        this.setState({
            showButton: false
        })
    }
}
// ....

或者您可以使用setState回调函数:

// ....
onInput = (event) => {
    this.setState({
        input: event.target.value }, ()=> {
    console.log(this.state.input)
    console.log(this.state.submit)

     // Conditional input to render button
     if (results.indexOf(this.state.input) > -1) {
        this.setState({
            showButton: true
        })
     } else {
        this.setState({
            showButton: false
        })
     }
   })
}
// ....

关于javascript - 输入表单后 react 条件显示/隐藏不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59357876/

相关文章:

javascript - Rails 4 应用程序...在开发环境中,除非刷新页面,否则不会触发 javascript

javascript - 仅在 Web 浏览器上运行 AWS 应用程序时出现 Expo 错误 (AmplifyI18n)

javascript - fadeIn() 数组中的元素,在不同时间随机(即,不按顺序)

javascript - 当通过 props 传入时,为什么需要 state 变量的 setter 作为 useEffect 的依赖项?

javascript - 仅当项目类型更改时才返回结果的 Switch 语句

reactjs - 开 Jest 如何检查 spy 函数中被调用的 spy 函数?

javascript - React Native - FlatList 对 renderItems 中的每个项目进行获取请求

javascript - 如何在我们的 react 应用程序中获取 JWT cookie,如何检查用户是否登录我无法找到如何处理我的 react 应用程序 session

javascript - 为什么 jquery focus() 只触发一次?

node.js - Express Post 方法无法读取属性 'toString'