代码之家  ›  专栏  ›  技术社区  ›  Thuan Nguyen

响应输入焦点事件以显示其他组件

  •  0
  • Thuan Nguyen  · 技术社区  · 6 年前

    我读了一些关于这个的教程。他们告诉我应该用ref来做。 但这很普遍。

    这是我的问题: 基本上 Header 组件包括 NavBar , SearchBar ResultSearch 组件。

    const Header = () => {
    return (
        <header className="ss_header">
            <Navbar />
            <SearchBar />
            <ResultSearch />
        </header>
    );
    };
    

    而在 搜索栏 组件。每当我专注于输入文本时。它发出一个事件并显示 结果搜索 任何形式的组件(更改样式,或…)。

    class SearchBar extends Component{
    render() {
    
        return (
            <div className="search_bar">
                <section className="search">
                    <div className="sub_media container">
                        <form method="GET" action="" id="search_form">
                            <Icon icon="search" />
                            <span className="autocomplete">
    
                            <input
                                className="search_input"
                                autoCorrect="off"
                                autoComplete="off"
                                name="query"
                                type="text"
                                placeholder="Search for a movie, tv show, person..." />
                        </span>
                        </form>
                    </div>
                </section>
            </div>
        );
    }
    }
    

    风格在 结果搜索 组件。我被设定 display: none .

    .results_search { display: none; }
    

    我认为ResultSearch将从 搜索栏 退后 display: block 对于 结果搜索 组件。有可能吗?

    我该怎么办? 我的代码在这里: https://codesandbox.io/s/3xv8xnx3z5

    2 回复  |  直到 6 年前
        1
  •  2
  •   Omid Nikrah    6 年前

    只有您应该转换标题组件,如下所示:

    class Header extends Component {
      state = {
        focus: false
      };
    
      handleInputFocus = () => {
        this.setState({ focus: true });
      };
    
      handleInputBlur = () => {
        this.setState({ focus: false });
      };
    
      render() {
        return (
          <header className="ss_header">
            <SearchBar
              onFocus={this.handleInputFocus}
              onBlur={this.handleInputBlur}
            />
            {this.state.focus ? <ResultSearch /> : null}
          </header>
        );
      }
    }
    

    同时在searchbar组件中向输入添加以下属性:

    onFocus={this.props.onFocus}
    onBlur={this.props.onBlur}
    

    另外,您应该删除关于结果框的css。

    并且,您可以在下面的沙盒上看到更新的代码:

    https://codesandbox.io/s/mmj46xkpo9

        2
  •  1
  •   Amin Paks    6 年前

    仍然不确定你想达到什么目标。

    这是处理搜索结果可见性的方法。如果这不是你要找的,告诉我。

    https://codesandbox.io/s/7jvz31xr66