美文网首页
React 组件处理数据

React 组件处理数据

作者: kevin5979 | 来源:发表于2020-10-02 13:48 被阅读0次

受控组件 (官方推荐)

  • 监听每次输入,并自己赋值, 实时拿到更新数据
export default class Label extends PureComponent {
  constructor(props) {
    super(props);
    this.state = {
      username: ""
    }
  }

  inputChange(e) {
    this.setState({
      username: e.target.value
    })
  }

  handleSubmit(e) {
    console.log(this.state.username);
    e.preventDefault()
  }

  render() {
    const {username} = this.state
    return (
      <div>
        <form onSubmit={e => this.handleSubmit(e)}>
          <label htmlFor="username">
            用户名:
          </label>
          <input
            type="text"
            id="username"
            onChange={e => this.inputChange(e)}
            value={username}
          />
          <input type="submit" value="提交"/>
        </form>
      </div>

    )
  }
}

非受控组件

  • 使用ref来获取表单元素;
  • 在非受控组件中通常使用defaultValue来设置默认值;
export default class App extends PureComponent {
  constructor(props) {
    super(props);

    this.usernameRef = createRef();
  }

  render() {
    return (
      <div>
        <form onSubmit={e => this.handleSubmit(e)}>
          <label htmlFor="">
            用户:<input defaultValue="默认值" type="text" name="username" ref={this.usernameRef}/>
          </label>
          <input type="submit" value="提交"/>
        </form>
      </div>
    )
  }

  handleSubmit(event) {
    // 提交时获取最终值
    console.log(this.usernameRef.current.value);
    event.preventDefault();
  }
}

Portal

  • Portal 提供了一种将子节点渲染到存在于父组件以外的 DOM 节点的优秀的方案
ReactDOM.createPortal(child, container)
child : 任何可渲染的 React 子元素,例如一个元素,字符串或 fragment;
container : 是一个 DOM 元素
// 示例
render() {
    return ReactDOM.createPortal(
      this.props.children,
      document.getElementById("modal")
    )
  }

Fragment

  • Fragment 允许你将子列表分组,而无需向 DOM 添加额外节点
  • 简写 <> ... </>
  • 注意点:Fragment简写形式不允许添加key

错误写法: <key={***}> ... </>

return (
 <Fragment>
    <header>头部</header>
    <footer>底部</footer>
 </Fragment>
)
// 简写
<>
  <header>头部</header>
  <footer>底部</footer>
</>
// 添加key
<Fragment key={item.id}>
  <div>{item.name}</div>
  <div>{item.age}</div>
</Fragment>

StrictMode

  • StrictMode 是一个用来突出显示应用程序中潜在问题的工具
  • 与 Fragment 一样,StrictMode 不会渲染任何可见的 UI

它为其后代元素触发额外的检查和警告;
严格模式检查仅在开发模式下运行;它们不会影响生产构建;
检测以下 :

  1. 不安全的生命周期 (UNSAFE_componentWillMount)
  2. 过时的ref API (ref="string")
  3. 废弃的findDOMNode方法
  4. 意外的副作用 (constructor被调用两次)
  5. 过时的context API
// 以下代码 StrictMode 对 B、C 组件进行检测, 而不对A、D 检测
return (
  <div>
    <A/>
    <React.StrictMode>
      <B/>
      <C/>
    </React.StrictMode>
    <D/>
  </div>
);

END

相关文章

  • 深入了解下React、Redux、React-Redux

    React:负责组件的UI界面渲染;Redux:数据处理中心;React-Redux:连接组件和数据中心,也就是把...

  • React 初探之 受控组件 VS 非受控组件

    概述 React 中的受控组件和非受控组件都是针对于表单数据而言的。React 推荐使用受控组件来处理表单数据。 ...

  • React 组件处理数据

    受控组件 (官方推荐) 监听每次输入,并自己赋值, 实时拿到更新数据 非受控组件 使用ref来获取表单元素; 在非...

  • React 的几个注意点

    受控组件和无状态组件 非受控组件推荐使用受控组件来实现表单. 在受控组件中, 表单数据是有React组件处理如果让...

  • 19.揭秘 React 真谛:数据状态管理

    如果说组件是 React 应用的骨骼,那么数据就是 React 应用的血液。单向数据流就像血液在应用体中穿梭。处理...

  • 利用 React 高阶组件实现一个面包屑导航

    什么是 React 高阶组件 React 高阶组件就是以高阶函数的方式包裹需要修饰的 React 组件,并返回处理...

  • react非受控组件

    在大多数情况下,我们推荐使用 受控组件 来处理表单数据。在一个受控组件中,表单数据是由 React 组件来管理的。...

  • 2、react基础介绍

    React理念 划分组件边界的原则 React组件的数据种类 React组件的声明周期 组件的划分 高内聚 低耦合...

  • react 之 ref

    Refs 可以直接访问 dom 节点或者 react 组件。 在传统的 react 数据流中,父组件与子组件的数据...

  • React进阶笔记4(非受控组件)

    在大多数情况下,我们推荐使用 受控组件 来实现表单。在受控组件中,表单的数据通过React数据来处理,如果让表单数...

网友评论

      本文标题:React 组件处理数据

      本文链接:https://www.haomeiwen.com/subject/wscghktx.html