在reactjs中发生状态改变后调用函数

2024-05-24

我的问题是这样的。我有两个组件。第一个组件是图像裁剪器。第二个组件是我应该显示裁剪图像的组件。

我面临的问题是我可以将裁剪后的图像传递到第二个组件,但我必须按下裁剪图像并传递到第二个组件的按钮两次。在第二次单击时,只有我的图像传递到第二个组件。但我只需单击一下即可在第一个组件中显示裁剪后的图像。我认为这种情况正在发生,因为在reactjs中状态变化不会立即发生。那么我该如何解决这个问题。

我的方法是创建一个prop第一个组件中的函数为this.props.croppedImage(this.state.preview.img); here this.state.preview.img是裁剪后的图像。在第二个组件中,我通过调用 prop 函数来获取裁剪后的图像。

My code

第一个组件(裁剪器)

class CropperTest extends React.Component {

    constructor(props) {

        super(props);

        this.state = {
            name: "beautiful",
            scale: 1,
            preview: null,
       }

        this.handleSave = this.handleSave.bind(this);

    }

    handleSave = () => {

        const img = this.editor.getImageScaledToCanvas().toDataURL();

        this.setState({
            preview: {
                img,
                scale: this.state.scale,
            }
        })

        this.props.croppedImage(this.state.preview.img);

    }

    setEditorRef = (editor) => {
        this.editor = editor
    }

    render() {
        return (
            <div>
                <div className="overlay"></div>

                <div className="crop_div">
                    <AvatarEditor
                        image={this.props.cropImage}
                        ref={this.setEditorRef}
                        width={450}
                        height={450}
                        border={50}
                        color={[255, 255, 255, 0.6]} // RGBA
                        scale={this.state.scale}
                        rotate={0}
                    />
                </div>



                <div className="zoom_slider text_align_center">
                    <input className="crop_btn" type='button' onClick={this.handleSave} value='Save'/>

                </div>

            </div>
        )
    }
}

export default CropperTest;

第二部分

在这里我基本上做了以下事情。

  <CropperTest  croppedImage = {this.getCroppedImg}/>

    getCroppedImg(img){

            alert("Perfect Storm");
            this.setState({

                previewImg:img

            })

        }

我认为这种情况正在发生,因为在reactjs中状态变化不会立即发生。那么我该如何解决这个问题呢?

来自React#setState https://facebook.github.io/react/docs/react-component.html#setstate,

setState(更新程序, [回调])

setState()将组件状态的更改加入队列。 这setState不会立即更新状态。setState()并不总是立即更新组件。它可能会批量更新或推迟更新。这使得读书this.state打电话后立即setState()一个潜在的陷阱。相反,使用componentDidUpdate or a setState打回来(setState(updater, callback))

致电this.props.croppedImage in the setState回调。您将获得组件状态的更新值。在你的情况下它this.state.preview

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

在reactjs中发生状态改变后调用函数 的相关文章

  • Angular.js:如何从无序列表中获取 orderBy 或过滤器来工作?

    尝试根据价格和评级 在返回的对象中 进行排序 我宁愿用 ng click 和 li 来代替使用选择菜单 有没有办法做到这一点 我环顾四周 这是我能想到的最接近的 ul class restaurant filter li i class i
  • 从 React Native Js 代码调用 Android Native UI 组件方法

    我创建了一个 CustomView SignatureView java 它扩展了 LinearLayout 以捕获 Android Native 中的签名 并创建了SignatureCapturePackage java和Signatur
  • 从回调中访问状态

    我在从回调访问组件状态时遇到问题 国家的价值num更改正确 但此类更改对于加载时定义的回调函数不可见 import React useState from react class MyObject callback gt void cons
  • nodejs (libuv) 事件循环是否在一个阶段(队列)中执行所有回调,然后再进入下一阶段或以循环方式运行?

    我正在研究 Node js 中 libuv 提供的事件循环 我遇到了关注 Deepal Jayasekara 的博客 https blog insiderattack net event loop and the big picture n
  • React 中的 Reconciliation 详解

    我是 React JS 的新手 谁能准确解释和解是如何运作的 我尝试从 React 官方网站上理解它 但没有得到它 我是这样理解的 您会同意 React 使用组件使事情变得简单且更快 通过 JSX 我们可以让用户定义的组件变得更容易 一天结
  • javascript 选择自定义光标 (svg)

    我正在动态地将光标更改为悬停时的本地 svg element on mouseover function this css cursor url svgs pointer svg 9 30 auto 工作正常 但我想选择该 svg 来操纵其
  • React autoFocus 将光标设置为输入值的开头

    我有一个受控输入 最初显示一个值 我已将该输入设置为自动聚焦 但当我希望它出现在末尾时 光标出现在输入的开头 我知道这可能是因为自动对焦是在值之前添加的 但我不能 100 确定 在输入字段末尾完成光标初始化的最佳方法是什么 var Test
  • JavaScript推送函数中的动态变量

    我在 JavaScript 中使用推送功能 var chartData for var i 0 i lt 3 i chartData push date new Date year s mon s date s hr s min s sec
  • 计算三次贝塞尔曲线的弧长、曲线长度。为什么不工作?

    我正在用这个算法计算弧长 三次贝塞尔曲线的长度 function getArcLength path var STEPS 1000 gt precision var t 1 STEPS var aX 0 var aY 0 var bX 0
  • onclick 事件中未调用函数

    我想在每个 YouTube 链接的末尾添加一些 HTML 以在 litebox 中打开播放器 到目前为止 这是我的代码 document ready function var valid url new RegExp youtube com
  • 创建反应应用程序:npm 错误!解析“...”附近时 JSON 输入意外结束

    描述错误 npx create react app my app不适合我 我试过npm cache clean force但我一次又一次地遇到同样的错误 重现步骤 npm cache clean force npm npx create r
  • 如何正确取消引用然后删除 JavaScript 对象?

    我想知道从内存中完全取消引用 JavaScript 对象的正确方法 确保删除时不会在内存中悬空 并且垃圾收集器会删除该对象 当我看这个问题时在 JavaScript 中删除对象 https stackoverflow com questio
  • 使用 Javascript 设置 cookie [重复]

    这个问题在这里已经有答案了 我正在尝试构建我的第一个移动应用程序 它需要连接到我的 mysql 数据库并使用 json 返回数据 这很好 目前我有一个登录系统 一旦确定用户名和密码存在 它就会返回一条成功消息 对于下一步 我想在我的页面上使
  • Google Maps API (v3) 添加/更新标记

    编辑 它现在可以工作 但如果用户不允许或没有基于位置的服务 则不会加载 请参阅 jsfiddle 示例接受的答案评论 我已经浏览了一些教程和问题 但我无法安静地理解正在发生的事情 或者在这种情况下 没有发生 当用户单击链接时 我正在加载地图
  • 使用 Jade 评估自定义 javascript 方法 (CircularJSON)

    我想通过 Jade 将一个对象解析为客户端 JavaScript 通常这会起作用 script var object JSON parse JSON stringify object but my object is circular ht
  • 使用 Enzyme 测试 `React.createRef` api

    我想测试下面的类 它使用React createRef api 不过 快速搜索并没有发现任何这样做的例子 有人成功过吗 我该如何嘲笑裁判 理想情况下我想使用shallow class Main extends React Component
  • react-native - 图像需要来自 JSON 的本地路径

    你好社区 我正在react native中开发一个测试应用程序 并尝试从本地存储位置获取图像 我实际在做什么 我将图像直接链接源提供给 var 并在渲染函数中调用此方法 react 0 14 8 react native 0 23 1 np
  • 如何从 json 文件创建模型? (ExtJS)

    这是我想使用 json 文件创建的模型 Ext define Users extend Ext data Model fields name user id type int name user name type string 为了根据服
  • 仅当显式选择行时才关闭 ui-bootstrap typeahead

    我创建了这个jsBin http jsbin com livuqafe 2 edit来证明我遇到的问题 如果您转到此处 请尝试输入 五 并继续 你的自然反应是输入 五 然后按 Tab 如果你想要 五百 你可以向下箭头一次 但是 在这种情况下
  • 测量窗口偏移

    有没有一种方法可以测量 jQuery 中窗口的偏移量 以便我可以比较 固定 元素和相对定位元素的位置 我需要能够知道窗口滚动了多远 以便我可以使用该图来计算固定元素的高度 相对于视口顶部 和相对对象的高度 相对于顶部 之间的差异文件的内容

随机推荐

  • setPointerCapture 仅适用于pointerDown 事件吗?

    MDN https developer mozilla org en US docs Web API Element setPointerCapture says Element 接口的 setPointerCapture 方法用于指定特定
  • 更新 EF 6 中子实体的正确方法是什么?

    必须有更好的方法来处理 EF 6 中的子保存 更新 当然 这种重复只是我的失败 Entity public partial class MyParentType public MyParentType this children new H
  • 处理css浏览器兼容性的正确方法是什么?

    是为每个用户代理使用不同的 CSS 文件更好 还是使用只有某些浏览器才能看到的 CSS Hacks 更好 Neither 最好的方法是编写适用于所有浏览器的代码 而不需要特定于浏览器的代码或 CSS hack 当然 实现起来并不那么容易 这
  • 从 Azure DevOps 发布管道获取版本号和内部版本号以显示在网站中

    我希望能够在 Asp Net MVC Core 网站中显示版本号 图片中的 1 和内部版本号 图片中的 2 针对该特定网站 该网站是使用 Azure DevOps 构建和发布的 因此 如果我签入 MVC 网站的代码 构建和发布过程就会启动并
  • 使用 asynctask 来加快 Android 应用程序的启动时间

    我有一个应用程序 它从两个网络加载广告 并在启动时将 flash 文件设置为 webview 这使得启动速度太慢 论坛告诉我使用 asynctask 有人可以将此代码设为 asynctask public void onCreate Bun
  • 核心数据迁移失败,并显示“找不到源存储的模型”,但存在源的 ManagedObjectModel

    我有一个使用 core data 的可可应用程序 它现在是其托管对象模型的第四个版本 我的托管对象模型包含抽象实体 但到目前为止 我已成功通过创建适当的映射模型并使用 addPersistentStoreWithType configura
  • 如何在android中将多部分表单数据和图像上传到服务器?

    在 Android 代码中将多部分实体图像上传到服务器期间的状态代码 500 html形式 可以成功添加图片到服务器
  • 如何从循环内的字符串中删除最后一个字符

    我正在尝试在 xml 中的一行中打印所选的不同类别 喜欢
  • webstorm 无法识别“require”关键字

    我在用着WebStorm作为IDE 这是我的文件夹结构和安装的express js 但我的示例代码不知道require关键词 var express require express var app express app listen 13
  • 当“开始”一项活动时,“总时间”是什么意思?

    我发起一个活动使用 am start W n 控制台输出 tangbincheng tangbinchengdeMacBook Pro adb shell shell hwp6 t00 su root hwp6 t00 am start W
  • Flutter包读取自己的资产

    我有一个带有 assets 文件夹的模块 该文件夹与我的 pubspec yaml 文件位于同一目录中 在我的资产文件夹中 有 test txt 和 simpleObject json flutter assets assets test
  • 在 php unlink 中使用通配符

    我目前正在制作一个 php 脚本来绘制数据库中的一堆数据 将其排列到文本文件中 然后运行 GNUPlot 脚本来生成图表 我已经完成了所有这些工作 现在我需要做的就是删除我不再需要的文本文件 我一直在尝试的内容是从不同论坛上的另一个帖子中获
  • 选择列表;这与我的 sql 中的 DISTINCT 不兼容

    CREATE DEFINER root localhost PROCEDURE GetAllEventIdList SP in skillId varchar 50 in offsetvalue int in recordlimit int
  • 使用 CSS 在 javaFX 中设置按钮样式

    我在使用 CSS 的 javaFX 中设置按钮样式时遇到问题 我使用 Intellij Idea IDE 我有 CSS css 文件 Button fx padding 8 15 15 15 fx background insets 0 0
  • 如何在 Windows 上应用差异补丁?

    有很多程序可以创建差异补丁 但我在尝试应用一个程序时遇到了很大的困难 我正在尝试分发补丁 但用户向我询问了如何应用该补丁 于是我尝试自己弄清楚 结果发现我毫无头绪 而且我能找到的大多数工具都是命令行的 我可以处理命令行 但是如果没有一个漂亮
  • IIS Express 安装目录在哪里?

    我最近开始了一个 ASP NET 教程 我想测试我用 WebMatrix 制作的页面 然而 有一个错误 Web 服务器配置为不列出该目录的内容 因此 它建议启用目录浏览并转到 IIS Express 安装目录并运行命令 那么它到底位于哪里呢
  • 将加载 gif 添加到简单脚本中

    我对 Javascript 真的很陌生 但我已经有了这个加载 url 内容的脚本 一切都工作正常 我使用按钮上的 onClick 方法调用 plannerSpin 函数 但是当这一切发生时 我将如何显示动画 gif var xmlHttp
  • 多行编辑文本和编辑文本的首字母大写

    你好 我正在尝试做EditText多行和第一个字母应该输入为大写 我正在使用android inputType textCapSentences 但设置为输入类型后textCapSentences它将第一个字母设置为大写但是EditText
  • MATLAB 中的逻辑数组与数值数组

    我正在比较两个二进制数组 我有一个数组 其中值可以是一或零 如果值相同则为 1 如果不同则为零 请注意 我正在做检查之外的其他事情 因此我们不需要进入矢量化或代码的性质 在 MATLAB 中使用数值数组和逻辑数组哪个更有效 Logical
  • 在reactjs中发生状态改变后调用函数

    我的问题是这样的 我有两个组件 第一个组件是图像裁剪器 第二个组件是我应该显示裁剪图像的组件 我面临的问题是我可以将裁剪后的图像传递到第二个组件 但我必须按下裁剪图像并传递到第二个组件的按钮两次 在第二次单击时 只有我的图像传递到第二个组件