当前位置: 首页 > 面试题库 >

如何指定带有功能组件的构造函数(胖箭头语法)?

汪安然
2023-03-14
问题内容

鉴于此组件:

import React from 'react'
import ReactDOM from 'react-dom'
import PropTypes from 'prop-types'

const NewGoalInput = props => {
  return (
    <input type="text" onKeyUp={handleKeyUp}/>
  )
}

const handleKeyUp = (e) => {
  if (e.key === "Enter") {
    // TODO Add goal
  }
}

export default NewGoalInput

如何添加一个无需使用extends React.Component语法即可定义状态的构造函数?


问题答案:

由于它是一个无状态组件,因此没有组件生命周期。因此,您不能指定constructor

您必须进行扩展React.Component以创建有状态组件,然后需要一个构造函数,并且可以使用state

更新
由于阵营16.8.0和挂钩得到了引入有更多的选择。

挂钩是一项新的功能建议,使您无需编写类即可使用状态和其他React>功能。它们作为> v16.8.0的一部分在React中发布

无状态:

import React from "react"

const Stateless = ({name}) => (
  <div>{`Hi ${name}`}</div>
);

有状态:

可以访问组件生命周期方法和本地状态。

class Stateful extends React.Component {
  constructor(props) {
    super(props);
    this.state = {
      count: 0
    };
  }

  componentDidMount() {
    const { count } = this.state;
    document.title = `You've clicked ${count} times.`;
  }

  componentDidUpdate() {
    const { count } = this.state;
    document.title = `You've clicked ${count} times.`;
  }

  render() {
    const { count } = this.state;
    return (
      <div>
        <p>You've clicked {count} times.</p>
        <button onClick={() => this.setState({ count: count + 1 })}>
          Click me
        </button>
      </div>
    );
  }
}

使用挂钩:

能够使用State HookEffect Hook

如果您熟悉React类的生命周期方法,则可以将useEffect
Hook视为componentDidMount,componentDidUpdate和componentWillUnmount的组合。

import React, { useState, useEffect } from "react";

const UsingHooks = () => {
  const [count, setCount] = useState(0);

  // Similar to componentDidMount and componentDidUpdate:
  useEffect(() => {
    // Update the document title using the browser API
    document.title = `You've clicked ${count} times.`;
  });

  return (
    // <> is a short syntax for <React.Fragment> and can be used instead of a wrapping div
    <>
      <p>You've clicked {count} times.</p>
      <button onClick={() => setCount(count + 1)}>
        Click me
      </button>
    </>
  );
}


 类似资料:
  • 问题内容: 这个问题与使用React时类似。是否最好在构造函数中使用胖箭头函数或绑定函数?但是有点不同。您可以将函数绑定到构造函数中,或者仅在构造函数中应用箭头函数。请注意,我只能在项目中使用ES6语法。 1。 2。 这两种方式的优缺点是什么?谢谢。 问题答案: 由于某些原因,选项1通常更可取。 原型方法更易于扩展。子类可以覆盖或扩展与 当实例属性 或ES.next class字段 代替使用,调用

  • 问题内容: 我可以使用关键字将javascript函数标记为“异步”(即返回承诺)。像这样: 箭头功能的等效语法是什么? 问题答案: 异步 箭头函数 如下所示: 传递给它的 单个参数的 异步 箭头函数 如下所示: __ 该 匿名 形式的作品,以及: 异步函数 声明 如下所示: 在 回调中 使用异步函数:

  • 但我想把它胖箭头化: 除了我得到一个错误,因为在胖箭头后面的意味着返回未定义的代码块(除非您显式地某些东西)。至少我一开始是这么想的。但我认为现在被绑定到胖箭头函数,现在是。 所以我试着这样做: 所以我想我有两个问题我很好奇。首先,从一个简单的语句胖箭头函数返回对象的惯用方法是什么?其次,如何返回对周围上下文的对象有引用的对象?

  • 我使用的是jdk8,需要创建一个以类名作为构造函数参数的Spring组件。但是,使用我当前的代码,我遇到了运行时错误: 这是我的博客类: 这就是我尝试创建类的方式: 我可以了解一下创建该组件的正确方法/这里出了什么问题吗?提前感谢。

  • 问题内容: 使用Typescript在Visual Studio中输入“ .ts”文件,请考虑以下声明: 这很好,类型检查很好,一切都很好。 现在,将完全相同的代码放入用于JSX和React的“ .tsx”文件中。 Intellisense感到非常沮丧和抱怨,因为它试图使 成为React JSX元素。但我的意图是让编译器将其视为通用类型指示符。 编译器抱怨: [gulp-typescript] 1

  • 我先试过这个- 很好用。现在我用胖箭做了同样的事情。在这种情况下,“this”是未定义的。