小编Sar*_*ngh的帖子

React - 在不使用setState的情况下更改状态:必须避免它吗?

我的代码有效,但我有一个最佳实践问题:我在状态中有一个对象数组,用户交互将一次更改一个对象的值.据我所知,我不应该直接改变状态,我应该总是使用setState.如果我想以任何代价避免这种情况,我将通过迭代深度克隆数组,并更改克隆.然后将状态设置为克隆.在我看来,避免改变我以后会改变的状态只会降低我的表现.

详细版本: this.state.data是一个对象数组.它代表论坛中的主题列表,收藏夹按钮将切换,调用clickCollect().由于我在状态中有一个数组,当我更改一个项的is_collected属性时,我需要创建一个要使用的数组的副本,并在更改为新值后,我可以将其设置为状态.

var data = this.state.data.slice(0);
data[index].is_collected = !data[index].is_collected;
this.setState({data: data});
Run Code Online (Sandbox Code Playgroud)

var data = this.state.data:这会将指针复制到数组,push(),shift()等会直接改变状态.双方datathis.state.data会受到影响.

var data = this.state.data.slice(0):这使得浅层克隆,推送和移位不会改变状态,但在我的克隆中,我仍然有指向状态数组元素的指针.所以,如果我改变data[0].is_collected,this.state.data[0].is_collected也会改变.这发生在我打电话之前setState().

通常我应该这样做:

var data = []; 
for (var i in this.state.data) {
    data.push(this.state.data[i]); 
}
Run Code Online (Sandbox Code Playgroud)

然后我更改index的值,当它为false时将其设置为true,否则为true时:

data[index].is_collected = !data[index].is_collected;
Run Code Online (Sandbox Code Playgroud)

并改变状态:

this.setState({data: data});
Run Code Online (Sandbox Code Playgroud)

考虑我的阵列相对较大或非常大,我想这次迭代会降低我的APP的性能.如果我知道这是出于任何原因的正确方法,我会支付这笔费用.但是,在这个函数(clickCollect)中,我总是将新值设置为状态,我不是在等待一个错误的API响应,它会说停止进行更改.在所有情况下,新值都将进入状态.实际上我setState只调用UI再次渲染.所以问题是:

  1. 在这种情况下,我是否必须创建深度克隆?(for var i in ...)
  2. 如果没有,.slice(0)如果我的数组包含对象,那么生成浅层clone()是否有意义?正在对数组内部的对象进行更改,因此浅层克隆仍会更改我的状态,就像copy(data = this.state.data)一样.

为简单起见,我的代码被简化并且API调用被删除.

这是一个初学者的问题,所以也欢迎采用完全不同的方法.或链接到其他问答.

import React from …
Run Code Online (Sandbox Code Playgroud)

javascript arrays state setstate reactjs

9
推荐指数
1
解决办法
8821
查看次数

是否有针对Flutter应用的AdMob或其他广告服务SDK

嗨,我想建立一个Flutter应用程序,但想在我的应用程序中放置一些广告,我可以用Flutter做到吗?我看着本地反应,他们有可用的广告,但我找不到任何有关Flutter的信息.

flutter

8
推荐指数
2
解决办法
4741
查看次数

什么是iphone和iPad的同步和异步?

什么是ios中的同步和异步?我是客观的新人.当我从服务器获取数据时,我应该在我的代码中使用哪一个.所以请帮助我.

提前致谢.

iphone ipad

5
推荐指数
1
解决办法
6796
查看次数

如何显示步骤进度条

我正在创建一个演示项目来显示表单进度。我的意思是,当用户分四个步骤填写表单时,我想显示用户每个步骤的进度。

为了更好地理解,请查看下面的屏幕截图。

步骤进展

我想创建类似上面屏幕截图的内容。所以请建议我。任何帮助或建议将不胜感激。

我无法使用 UISlider,因为不可能在一个 UISlider 中创建四个拇指。

提前致谢... :)

ios swift

5
推荐指数
1
解决办法
1万
查看次数

如何在iPhone的快速iOS中使用FBSDK获取用户电子邮件地址?

我是使用Swift快速学习的自学开发iPhone应用程序。我正在设计一个使用FBSDK进行Facebook身份验证的登录页面。我已经成功实现了登录和注销的登录按钮。它返回用户名和ID,但无法绘制用户电子邮件ID的图形,并显示代码2500错误。另外,我无法使用新用户登录。它会自动以同一用户登录。

这是错误:

UserInfo={com.facebook.sdk:FBSDKGraphRequestErrorCategoryKey=0, com.facebook.sdk:FBSDKGraphRequestErrorHTTPStatusCodeKey=400, com.facebook.sdk:FBSDKErrorDeveloperMessageKey=An active access token must be used to query information about the current user., com.facebook.sdk:FBSDKGraphRequestErrorGraphErrorCode=2500, com.facebook.sdk:FBSDKGraphRequestErrorParsedJSONResponseKey={
    body =     {
        error =         {
            code = 2500;
            "fbtrace_id" = BimF4Nuqx0v;
            message = "An active access token must be used to query information about the current user.";
            type = OAuthException;
        };
    };
    code = 400;
}})
Successfully logged in with Facebook... 
123
result Optional({
    id = 120008981838163;
    name = "Nisha Ios";
})
Did Logout of Facebook
Run Code Online (Sandbox Code Playgroud)

这是我在AppDelegate.swift中的代码:

import UIKit …
Run Code Online (Sandbox Code Playgroud)

ios facebook-login fbsdk swift3

3
推荐指数
1
解决办法
4406
查看次数

如何快速将 .caf 音频文件转换为 .mp4 文件

我正在使用设备麦克风录制音频,AVAudioRecorder该麦克风以.caf格式返回文件,该文件只能在 Apple 设备上播放,但不能在 Android 设备上播放。由于 Apple 不支持.mp3文件,所以我想在上传到服务器之前将其转换为.mp4格式。为.MP4是良好的只有音频?我可以转换它AVAssetExportSession吗?

以下是录音机代码:

func setupAudioRecorder ()
    {

    let fileMgr = FileManager.default
    let dirPaths = fileMgr.urls(for:.documentDirectory,
                                in:.userDomainMask)

    let soundFileURL = dirPaths[0].appendingPathComponent("myaudio.caf")

    let recordSettings =
        [AVEncoderAudioQualityKey: AVAudioQuality.min.rawValue,
         AVEncoderBitRateKey: 16,
         AVNumberOfChannelsKey: 2,
         AVSampleRateKey: 44100.0] as [String : Any]

    do {
        try audioSession.setCategory(
            AVAudioSessionCategoryPlayAndRecord)
    } catch let error as NSError {
        print("audioSession error: \(error.localizedDescription)")
    }

    do {
        try audioRecorder = AVAudioRecorder(url: soundFileURL,
                                            settings: recordSettings as [String : …
Run Code Online (Sandbox Code Playgroud)

xcode avaudiorecorder ios avassetexportsession swift

3
推荐指数
1
解决办法
3423
查看次数

SSL固定和证书验证之间的区别

有人可以解释在这里使用自签名证书验证证书之间的区别:

https://jetforme.org/2013/05/validating-a-self-signed-ssl-certificate-in-ios-and-os-x-against-a-changing-host-name/

和SSL固定如下所述:

https://infinum.co/the-capsized-eight/how-to-make-your-ios-apps-more-secure-with-ssl-pinning

  • 什么SecPolicyCreateSSL意思?
  • 详细的是SecTrustEvaluate做什么的?
  • 第一个链接中的过程是否包括SSL固定?
  • 如果没有,那么实施两者是否是个好主意?

谢谢

ssl https self-signed pinning ios

2
推荐指数
1
解决办法
2397
查看次数

快速访问相机和照片库4

我正在尝试使用以下代码在swift4中访问相机和照片库

let imagePickerController = UIImagePickerController()
    imagePickerController.delegate = self
    let alert = UIAlertController(title: "", message: "", preferredStyle: .actionSheet)
    alert.addAction(UIAlertAction(title: "Camera", style: .default, handler: {(action: UIAlertAction) in
        imagePickerController.sourceType = .camera
        print(1)
    }))
    alert.addAction(UIAlertAction(title: "Photo Album", style: .default, handler: {(action: UIAlertAction) in
        imagePickerController.sourceType = .photoLibrary
    }))
    alert.addAction(UIAlertAction(title: "Cancel", style: .default, handler: nil))
    self.present(alert, animated: true, completion: nil)
Run Code Online (Sandbox Code Playgroud)

但它不起作用。即使我确保plist具有相机和照片库的授权,也没有收到访问授权请求。我对以下代码进行了一些操作

AVCaptureDevice.requestAccess(for: AVMediaType.video) { response in
    }
    let photos = PHPhotoLibrary.authorizationStatus()
    if photos == .notDetermined {
        PHPhotoLibrary.requestAuthorization({status in
        })
    }

    let imagePickerController = UIImagePickerController()
    imagePickerController.delegate = …
Run Code Online (Sandbox Code Playgroud)

camera photolibrary ios swift phphotolibrary

2
推荐指数
2
解决办法
1万
查看次数

如何从数组中获取url并在表视图上显示图像

提前致谢.我在数组中获取图像url.

myarray = { "http://www.abc.com/uploads/sarab.jpg", .... };
Run Code Online (Sandbox Code Playgroud)

现在我不知道如何在表格视图中访问图像?是否有任何示例代码可以提供帮助?

iphone objective-c ios

0
推荐指数
1
解决办法
3399
查看次数