You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React中如何修改HTML元素样式、点击控制组件显隐及创建函数式组件?

React组件显隐控制与函数式组件说明

1. 点击按钮显示ConfigureWindow组件实现

实现思路

在父组件App中通过state控制ConfigureWindow的显隐状态,将状态更新方法通过props传递给子组件,实现开启/关闭配置窗口的能力。

完整修改代码

修正后的App组件

class App extends React.Component {
  // 初始化state,默认隐藏配置窗口
  state = {
    showConfigureWindow: false
  }

  // 打开配置窗口方法
  openConfigureWindow = () => {
    this.setState({ showConfigureWindow: true })
  }

  // 关闭配置窗口方法
  closeConfigureWindow = () => {
    this.setState({ showConfigureWindow: false })
  }

  render() {
    return (
      <div id="appWrapper">
        {/* 条件渲染:只有state为true时才渲染配置窗口 */}
        {this.state.showConfigureWindow && <ConfigureWindow onClose={this.closeConfigureWindow} />}
        {/* 给按钮绑定点击事件触发打开窗口 */}
        <button 
          id="configureClocksButton"
          onClick={this.openConfigureWindow}
        >
          Configure clocks
        </button>
        <section id="clocksHere"></section>
      </div>
    );
  }
}

修正后的ConfigureWindow组件

const ConfigureWindow = (props) => (
  <div id="configureWindowWrapper">
    <div id="configureWindow">
      <section id="addCitySection">TODO: adding a city</section>
      <div id="verticalLine"></div>
      <section id="listOfCities">
        <header>
          <h1>Available cities</h1>
          <div id="closeConfigureWindowWrapper">
            {/* 给关闭按钮绑定点击事件,调用父组件传过来的关闭方法 */}
            <img 
              src="../src/images/exit.png" 
              id="closeConfigureWindow" 
              alt="关闭窗口"
              onClick={props.onClose}
            />
          </div>
        </header>
        <section id="availableCities"></section>
      </section>
    </div>
  </div>
);

常见报错排查

如果之前实现时出现报错,通常是以下原因:

  • 类组件中未正确初始化state,或者修改state时用了直接赋值而非setState方法
  • 事件回调函数的this指向错误,上述代码用箭头函数定义类方法避免了this指向问题
  • 条件渲染语法错误,比如用了if语句直接写在JSX结构中
  • 子组件未正确接收props,或者调用props方法时名称拼写错误

2. React函数式组件创建说明

函数式组件是React目前推荐的组件写法,在React 16.8版本引入Hooks后,函数式组件已经可以完全替代类组件实现所有能力。

基础规则

  • 组件名称必须以大写字母开头,React以此区分自定义组件和原生HTML标签
  • 组件是一个普通JS函数,接收唯一的props对象作为参数,存储父组件传递的所有属性
  • 必须返回合法的JSX结构,返回null时表示不渲染任何内容

常见写法

基础写法

// 写法1:函数声明写法
function Welcome(props) {
  return <h1>Hello, {props.name}</h1>;
}

// 写法2:箭头函数写法
const Welcome = (props) => {
  return <h1>Hello, {props.name}</h1>;
}

// 简写:只有返回逻辑时可以省略大括号和return关键字
const Welcome = (props) => <h1>Hello, {props.name}</h1>;

带状态的函数式组件

使用useState Hook可以给函数式组件添加内部状态:

import { useState } from 'react';

const Counter = () => {
  // 定义状态count,默认值为0,setCount是更新状态的方法
  const [count, setCount] = useState(0);
  return (
    <div>
      <p>计数:{count}</p>
      <button onClick={() => setCount(count + 1)}>加1</button>
    </div>
  )
}

内容的提问来源于stack exchange,提问作者user16336116

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 09:45:03