在react-native中使用函数的区别

2023-12-09

假设我有一个向其传递函数的组件。

export default class SomeComp extends Component {
    constructor(props) {
        super(props);
    }

    _someFunc = () => {
        return ...
    }

    render() {
        return (
            <View
                onLayout={this._someFunc()}
            />

OR

            <View
                onLayout={() => {this._someFunc()}}
            />

        )
    }
}

区别在哪里onLayout={this._someFunc()} and onLayout={() => {this._someFunc()}}?


差异实际上取决于如何以及何时onLayout被触发。

  • onLayout={this._someFunc()}

    每次渲染你的组件时onLayoutprop 将从中获取返回值this._someFunc()功能。换句话说,该函数将在每次渲染时运行。

  • onLayout={() => {return this._someFunc()}} or onLayout={() => this._someFunc()}

    每次渲染你的组件时onLayoutprop 会将引用绑定到一个匿名函数,该函数包含对_someFunc()功能。后一个函数不会被执行,除非onLayout被某种方式触发。


例如,假设有以下组件:

class MyApp extends React.Component {

  _someFunc = () => {
    return "bar";
  }

  render() {
    return(
      <div>
        <A foo={this._someFunc()} />
        <B foo={() => {return this._someFunc()}} />
      </div>
    );
  }
}

const A = ({foo}) => {
  console.log(foo);  //prints "bar"
  return <div>A</div>;
}

const B = ({foo}) => {
  console.log(foo);  //prints the reference to _someFunc()
  console.log(foo());  //prints "bar"
  return <div>B</div>;
}

ReactDOM.render(<MyApp />, document.getElementById("app"));
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script>
<div id="app"></div>

在组件中A the fooprop 将得到的值"bar".

在组件中B the fooprop 将是对稍后可以调用的函数的引用。该函数将依次调用_someFunc这将返回"bar"。所以如果在组件中B你想获得这个值,你需要用它来调用它this.props.foo().

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在react-native中使用函数的区别 的相关文章

  • 为什么当我保存更改时,Expo 没有刷新?

    当我进行更改并保存它们时 模拟器中的应用程序不会刷新 我认为模拟器没有连接到 Metro 服务器 我尝试通过运行清除缓存expo r c 但这没有做任何事情 您是否尝试启用快速刷新 我遇到了同样的问题 但在启用 快速刷新 后 自动刷新再次开
  • ListView无法滚动

    正如你在所附的 GIF 中看到的 我无法滚动浏览ListView 一旦我释放鼠标 视图就会恢复到原始位置 我已经阅读了文档 似乎滚动应该只是工作 这是执行render render function return
  • 我可以在 GWT 中使用第三方 Javascript 库吗

    例如穆工具 用 js 编码对我来说很舒服 但显然不适合所有人 你当然可以 最好的事情就是给自己写一些好看的JavaScript 覆盖类型 http code google com webtoolkit doc latest DevGuide
  • 如何将一个数组中的所有项目复制到另一个数组中?

    如何将数组的每个元素 其中元素是对象 复制到另一个数组中 以便它们完全独立 我不想更改一个数组中的元素来影响另一个数组 这里的关键是 数组中的条目是对象 并且 您不希望对一个数组中的对象的修改显示在另一个数组中 这意味着我们不仅需要将对象复
  • 正则表达式中连字符的这种用法有效吗?

    NB I only想知道它是否是正则表达式定义中未转义连字符的有效应用 它是not关于匹配电子邮件 连字符或反斜杠的含义 量词或其他任何内容的问题 另外 请注意 链接的答案并没有真正讨论转义 未转义连字符之间的有效性问题 通常我会像这样声明
  • jquery 中的函数返回未定义[重复]

    这个问题在这里已经有答案了 我在 jquery 中调用的函数返回未定义 我检查了该函数 当我对其进行调试时 它返回正确的数据 function addToPlaylist component type add to pl value pl
  • 如何在 JSX 中使用 switch case:ReactJS

    我的反应应用程序中导入了四个组件 我如何有条件地渲染组件之一 基于道具 这就是我想做的
  • Firefox Addon 中的 JQuery 导致多个警告

    我在 Firefox 插件中使用 jquery 但我不断收到大量警告消息 如下所示 anonymous function does not always return a value System JS WARNING resource g
  • Chrome --app 相当于 Firefox\IE

    我有一个网络应用程序 客户要求单击不同按钮时更改浏览器窗口大小 我发现在那link https stackoverflow com questions 13436855 launch google chrome from the comma
  • 播放没有音频标签的音频

    是否可以在没有音频标签的情况下仅使用 javascript 播放音频 我通过 tinyMce 编辑器注入脚本 因为我无权访问网站的后端 并且它不支持客户端的音频标签 她只想要当您将鼠标悬停在图像上时发出简单的声音 我已经完成了所有设置 但是
  • 从链接打开本地文件夹

    如何通过单击任何链接打开本地文件夹视图 我尝试了很多选择 例如 a href Open folder a or a Open folder a or a Open folder a 解决方案 启动可下载链接 以下内容适用于所有浏览器 但一如
  • 从字节数组设置 img src

    我需要设置img src我在对象中拥有的字节数组的属性 img
  • 在反应中访问回调内的 event.target

    我有以下课程片段 constructor props super props this timeout null search e gt clearTimeout this timeout this timeout setTimeout f
  • 了解 Document.createElement()

    我在用着GWT及其底层DOM能力 我基本上想要实现的是 Have a div包含一些文本的元素 其中一些文本将被包围span元素 span 元素可相互拖动并提供上下文菜单 New span元素可以由最终用户动态创建 它可能是这样的 在应用程
  • React Redux - 在辅助函数中访问现有存储

    我试图在反应组件之外获取存储实例 存储状态 即在单独的辅助函数中 我有我的减速器 我的动作 我在最上面的组件中创建了一个商店 configStore js import createStore from redux import gener
  • 如何解决“消息端口在收到响应之前已关闭”的问题。在 JavaScript 中的 window.location.reload() 之后

    我遇到了 javascript 问题 从 chrome v73 0 3683 86 开始 每当我在 window location reload 函数之后运行 javascript 代码时 它总是给我错误 Unchecked runtime
  • 如何在 React Native 中使用相同的 Firebase 数据库在两个应用程序之间进行通信?

    我有两个不同的应用程序使用相同的实时数据库 在第一个应用程序中 我发送的订单包含一些要保存在数据库中的数据字段 在另一个应用程序中 我只添加一个侦听器 firebase database ref userOrder currentUser
  • 为什么 JavaScript 中是 [1,2] + [3,4] = "1,23,4" ?

    我想将一个数组的元素添加到另一个数组中 所以我尝试了以下方法 1 2 3 4 它的回应是 1 23 4 到底是怎么回事 The 操作员没有为数组定义 发生的事情是 JavaScript将数组转换为字符串并将它们连接起来 Update 由于这
  • 如果 POST 响应仅包含 ID,如何将数据保存到我的 Ember 存储?

    Ember 数据期望我的服务器在每次成功后返回完整的对象POST 但是 我的 API 只返回一种元对象 其中包含id 当 Ember 收到此对象时 记录中的现有数据将被删除 除了id 例如 当我这样做时 var asset App Asse
  • JavaScript 阶乘防止无穷大

    我一直在 JavaScript 中使用这个函数来计算阶乘数 var f function factorial n if n 0 n 1 return 1 if f n gt 0 return f n return f n factorial

随机推荐

  • Visual Studio 2010 局部变量历史记录

    我正在调试一个具有多个嵌套循环的进程 这些循环会更改几个不同的局部变量 我可以通过一次迭代一次来观看这些内容 但这非常乏味 而且我正在忘记自己的位置 我根本没有时间每次都记下每个变量 有没有办法可以查看局部变量的历史记录 一个插件 如果没有
  • 在 xsl 变量中存储 html 标签

    抱歉 如果这是一个愚蠢的问题 但是可以在 xsl 1 0 变量中存储和检索 HTML 片段吗 例如
  • 在 Vagrant 配置期间使用 Sed 将行追加到文件

    我目前正在使用Vagrant设置运行 Ubuntu 的开发机器 我想在我的中添加几行 profile将目录添加到我的 PATH变量 使用sed 为此 我将这些行添加到我的机器中Vagrantfile config vm provision
  • 左值整型常量表达式是常量表达式吗?

    N4527 5 20 表达式常量 p3 An 积分常量表达式是整型或无范围枚举类型的表达式 隐式转换为纯右值 其中转换后的表达式是核心常量表达式 5 20 expr const p5 A 常量表达式是一个泛左值核心常量表达式 其值引用作为常
  • 为什么 Rust 不允许可变别名?

    Rust 不允许这种代码 因为它不安全 fn main let mut i 42 let ref to i 1 unsafe mut mut i as mut i32 let ref to i 2 unsafe mut mut i as m
  • 从给定 X 值的密度函数检索 Y 值

    给定一个简单的密度直方图和曲线 如下所示 如何检索给定 X 值的 Y 值 例如 y 值位于mean dat dat lt c 5 7 4 6 4 3 55 6 7 5 4 3 33 44 5 2 33 22 hist dat freq F
  • currentUser 返回 null

    我有一个使用 firebase auth 进行身份验证的反应应用程序 当一个人登录后 它会将他们重定向到书籍页面 这是提交登录处理程序 import auth firebase from firebase async function go
  • 如何使用 SMOTE 将合成数据集保存在 CSV 文件中

    我使用信用卡数据通过 SMOTE 进行过采样 我正在使用 geeksforgeeks org 中编写的代码 Link 运行以下代码后 它会显示类似以下内容 print Before OverSampling counts of label
  • 字符串周日期到冷融合日期

    我需要格式化一个字符串日期 如下所示 2021 W46 变成我可以在冷融合中使用的东西parseDateTime or dateFormat功能 W46在本例中是第 46 周 我尝试的是直接将该字符串放入parseDateTime and
  • Java并发——发布不可变对象(Java并发实践)

    在 Java Concurrency In Practice 一书中 作者指出 不可变对象可以通过任何机制发布 任何线程都可以安全地使用不可变对象 无需额外的同步 即使不使用同步来发布它们也是如此 这是否意味着以下习惯用法可以安全地发布不可
  • 在 Java 中使用 SWIG 处理返回指向结构数组的指针的 C 函数

    我试图找出需要进行哪些 SWIG 接口文件更改才能处理 getFoo 返回指向自定义结构数组 sender id t 的指针 没有任何特殊的 SWIG 接口代码 我只得到 Java 端的指针 如何将该指针转换为可以循环或迭代的对象 在 Ja
  • 从 NSExpression 捕获 NSInvalidArgumentException

    在我的代码中 我将字符串评估为数学表达式 例如 NSString formula 9 7 NSExpression expr NSExpression expressionWithFormat formula NSLog expr expr
  • c# 为什么当路径为“C:”时,directoryInfo 将我带到应用程序文件夹?

    为什么当我给出路径 c 时它直接将我更改为应用程序文件夹 static void Main string args DirectoryInfo dir new DirectoryInfo c Console WriteLine dir Fu
  • 如何针对 64 位优化 .NET 网站和应用程序?

    如何在 NET 2 0 Web 应用程序和控制台 表单应用程序中充分利用 64 位架构 我认为在 32 位与 64 位架构方面 您的托管 NET 代码中没有太多可以优化的地方 这是因为大多数差异和优化很可能已经由底层虚拟机实现 正如中提到的
  • 一段时间后显示 UIAlertView

    我试图在一段时间后显示 UIAlertView 比如在应用程序中执行某些操作后 5 分钟 如果应用程序已关闭或在后台运行 我已经通知用户 但我想在应用程序运行时显示 UIAlertView 我尝试按如下方式调度异步 但警报永远弹出 NSTh
  • URL 以句点结尾的 WebClient 问题

    我正在运行以下代码 using WebClient wc new WebClient string page wc DownloadString URL 要访问股价网站的 URL http www shareprice co uk 如果您将
  • JPA:级联删除不会删除子级

    编辑 修改问题以更好地反映问题 最初发布的问题here 我有一个父母 Context 和一个孩子 User 实体 多对一关系 父级上的级联 REMOVE 不会删除子级 代码如下 Owning side child Entity public
  • 如何在Python中获取CSV文件的总行数?

    我正在使用 python Django 框架 来读取 CSV 文件 如您所见 我仅从该 CSV 中提取了 2 行 我一直在尝试做的是将 CSV 的总行数存储在变量中 如何获得总行数 file object myfilePath fileOb
  • OpenCart - 不发送电子邮件(通知或联系页面)

    据我所知 我的邮件设置配置正确 但我没有收到任何电子邮件 不是通过联系表单收到的 也没有收到新客户或下的任何订单的电子邮件 这是我当前的设置 我试过了 更改为 SMTP 我收到错误 我的主机 IXWebHosting 说我 需要在应用程序内
  • 在react-native中使用函数的区别

    假设我有一个向其传递函数的组件 export default class SomeComp extends Component constructor props super props someFunc gt return render