美文网首页
返回函数的函数

返回函数的函数

作者: SingleDiego | 来源:发表于2020-12-01 16:27 被阅读0次

我们先来看一个处理点击事件的例子。

import React, { useState, useEffect } from 'react';
import ReactDOM from 'react-dom';

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

  const handalClick = () => {
    setCount(count + 1)
  };

  return (
    <div>
      <p>You clicked {count} times</p>
      <button onClick={handalClick}>
        + 1
      </button>
    </div>
  );
}

ReactDOM.render(
  <App />, 
  document.getElementById('root')
);

容易理解,这是一个每点击一次就会让 count 变量加1的函数,如果我们想让函数带上参数,用参数来决定增加的数量,那该怎么做呢。

我们先这样尝试一下。

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

  const handalClick = (num) => {
    setCount(count + num)
  };

  return (
    <div>
      <p>You clicked {count} times</p>
      <button onClick={handalClick(10)}>
        + 10
      </button>
    </div>
  );
}

如果这样做,React 会给我们如下报错信息,显示会无限循环了:

Error: Too many re-renders. React limits the number of renders to prevent an infinite loop.

正确的做法应当是让函数返回另一个函数:

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

  const handalClick = (num) => () => {
    setCount(count + num)
  };

  return (
    <div>
      <p>You clicked {count} times</p>
      <button onClick={handalClick(10)}>
        + 10
      </button>
    </div>
  );
}




将事件处理传递到子组件
const Button = (props) => (
  <button onClick={props.handleClick}>
    {props.text}
  </button>
)

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

  const setToCount = (newCount) => {
    setCount(newCount)
  }

  return (
    <div>
      <p>You clicked {count} times</p>
      <Button handleClick={() => setToCount(count + 10)} text='+ 10' />
      <Button handleClick={() => setToCount(count + 100)} text='+ 100' />
    </div>
  );
}
网页效果

注意要使用正确的名称,来确保 props 组件获得正确的属性。

相关文章

  • Java Script基础

    函数 function 函数的声明 函数的 调用 函数的传参 函数返回值 Return 返回...

  • swift学习笔记(6)--- 函数

    1、函数的定义与调用 2、函数参数与返回值 无参数函数 多参数函数 无返回值函数 多重返回值函数 可选元组返回类型...

  • 【Python】返回函数/匿名函数/装饰器/偏函数

    返回函数 函数作为返回值。 调用A时,返回函数a,调用a时,返回值 闭包在函数里又定义了新函数,内部函数可以引用外...

  • 三、JavaScript 笔记之闭包

    当函数作为参数传入函数,该函数为高阶函数,当函数作为函数的返回结果返回,就形成了闭包。返回的函数被引用,该引用就保...

  • 19-01-07b变量作为函数的返回值=高阶函数

    4.变量作为函数的返回值函数1作为函数2的返回值 - 函数2是返回值高阶函数

  • 2022-04-16 返回函数

    返回函数的特点 一个函数可以返回一个计算结果,也可以返回一个函数。 返回一个函数时,牢记该函数并未执行,返回函数中...

  • 深入理解ES6--函数之name属性

    函数的name属性返回该函数的函数名。 非匿名函数 匿名函数 非匿名函数赋值给变量 bind返回的函数,name属...

  • python 函数进阶

    函数进阶 目标 函数参数和返回值的作用 函数的返回值 进阶 函数的参数 进阶 递归函数 01. 函数参数和返回值的...

  • python 函数进阶

    函数进阶 目标 函数参数和返回值的作用 函数的返回值 进阶 函数的参数 进阶 递归函数 01. 函数参数和返回值的...

  • Python函数高阶

    函数进阶 目标 函数参数和返回值的作用 函数的返回值 进阶 函数的参数 进阶 递归函数 01. 函数参数和返回值的...

网友评论

      本文标题:返回函数的函数

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