小编Phi*_*ton的帖子

你可以强制React组件重新渲染而不调用setState吗?

我有一个外部(对组件),可观察的对象,我想听取更改.当对象更新时,它会发出更改事件,然后我想在检测到任何更改时重新呈现组件.

使用顶级React.render这是可能的,但在一个组件中它不起作用(这有一定意义,因为该render方法只返回一个对象).

这是一个代码示例:

export default class MyComponent extends React.Component {

  handleButtonClick() {
    this.render();
  }

  render() {
    return (
      <div>
        {Math.random()}
        <button onClick={this.handleButtonClick.bind(this)}>
          Click me
        </button>
      </div>
    )
  }
}
Run Code Online (Sandbox Code Playgroud)

单击按钮会在内部调用this.render(),但这不是实际导致渲染发生的原因(您可以看到此操作因为创建的文本{Math.random()}不会更改).但是,如果我只是打电话this.setState()而不是this.render(),它可以正常工作.

所以我想我的问题是: React组件需要有状态才能重新渲染吗?有没有办法强制组件按需更新而不改变状态?

reactjs react-jsx

608
推荐指数
12
解决办法
72万
查看次数

为什么当应用程序从后台返回时,不会调用viewWillAppear?

我正在编写应用程序,如果用户在通话时查看应用程序,我需要更改视图.

我已经实现了以下方法:

- (void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];
    NSLog(@"viewWillAppear:");
    _sv.frame = CGRectMake(0.0, 0.0, 320.0, self.view.bounds.size.height);
}
Run Code Online (Sandbox Code Playgroud)

但是,当应用程序返回到前台时,它不会被调用.

我知道我可以实现:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(statusBarFrameChanged:) name:UIApplicationDidChangeStatusBarFrameNotification object:nil];
Run Code Online (Sandbox Code Playgroud)

但我不想这样做.我宁愿将所有布局信息放在viewWillAppear:方法中,让它处理所有可能的场景.

我甚至试图从applicationWillEnterForeground:调用viewWillAppear:但我似乎无法确定当前哪个是当前的视图控制器.

有人知道处理这个问题的正确方法吗?我确定我错过了一个明显的解决方案.

iphone objective-c viewwillappear ios

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

Xcode版本(CFBundleShortVersionString)和构建版本(CFBundleVersion)之间的区别

应用目标摘要

在Xcode 4中,我看到了我的目标摘要:

"Version"输入对应CFBundleShortVersionString于info.plist文件,"Build"输入对应于CFBundleVersion.

这两者有什么区别?我看到互联网上有很多人想要为两者提供相同的价值,我怀疑这是为了向后兼容.

我有两个问题:

1)如果我从头开始,那么对应用程序进行版本控制的最佳做法是什么?

2)在我的应用程序的所有先前版本中,我只使用过CFBundleVersion.为了不搞乱升级过程,我应该继续以CFBundleVersion同样的方式增加,还是可以切换到"正确的方式",假设一个存在?

xcode objective-c

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

Javascript指针/参考疯狂.有人可以解释一下吗?

Javascript通过引用传递对象.这很有道理.但是一旦你开始操纵这些物体,一切都会以一种看起来不直观的方式发挥作用.让我举一个例子:

var a, b;

a = {}
b = a;
a['one'] = {};

console.log( JSON.stringify(a) );
// outputs: {"one":{}}

console.log( JSON.stringify(b) );
// outputs: {"one":{}}
Run Code Online (Sandbox Code Playgroud)

这一切都很好,因为现在b有一个指针,a所以预计分配东西a也会影响b.

但是如果我这样做:

a = a['one'];

console.log( JSON.stringify(a) );
// outputs: {}

console.log( JSON.stringify(b) );
// outputs: {"one":{}}
Run Code Online (Sandbox Code Playgroud)

这对我来说很惊讶.我期望a,并b仍然是相同的(并且是{}因为a['one']原先设置为{}a设置为a['one']).

但事实并非如此.似乎a失去了b对它被赋予新内容的时间的引用,但b保留了aa失去引用之前设置的值b.

但是如果我这样做:

a['two'] …
Run Code Online (Sandbox Code Playgroud)

javascript pointers reference

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

如何在窗口外拖动时检测Firefox中的dragleave事件

在窗口外拖动时,Firefox无法正确触发dragleave事件:

https://bugzilla.mozilla.org/show_bug.cgi?id=665704

https://bugzilla.mozilla.org/show_bug.cgi?id=656164

我正在尝试为此开发一种解决方法(我知道这可能是因为Gmail正在这样做),但我能想出的唯一的东西似乎真的很乱.

知道何时拖出窗外的一种方法是等待dragover事件停止发射(因为dragover在拖放操作期间不断发射).这就是我这样做的方式:

var timeout;

function dragleaveFunctionality() {
  // do stuff
}

function firefoxTimeoutHack() {
  clearTimeout(timeout);
  timeout = setTimeout(dragleaveFunctionality, 200);
}

$(document).on('dragover', firefoxTimeoutHack);
Run Code Online (Sandbox Code Playgroud)

此代码实际上是一次又一次地创建和清除超时.除非dragover事件停止触发,否则将无法达到200毫秒的超时.

虽然这有效,但我不喜欢为此目的使用超时的想法.感觉不对.这也意味着在"掉落区"造型消失之前会有一点滞后.

我的另一个想法是检测鼠标何时离开窗口,但在拖放操作期间,这样做的正常方法似乎不起作用.

有没有人有更好的方法这样做?

更新:

这是我正在使用的代码:

<!doctype html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <title>Drag and Drop Issue</title>
  <script src="http://code.jquery.com/jquery.js"></script>
</head>
<body>
  Open up the console and look at what number is reporting when dragging files in and out of the window. The number should always be 0 when leaving …
Run Code Online (Sandbox Code Playgroud)

javascript jquery html5 drag-and-drop

36
推荐指数
1
解决办法
9349
查看次数

如何查看iphone模拟器的钥匙串

我开发了一个iPhone应用程序,其中我使用公钥和私钥加密和解密数据.我想在Keychain中看到这个键.我在应用程序/实用程序下获得了mac应用程序的钥匙串条目,但是iPhone模拟器Keychain和iPhone上的Keychain在设备上的位置是什么.

iphone keychain

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

与UIWebView相比,本机代码中的电话呼叫不同后返回应用行为

根据Apple的文档,为了从我的应用程序拨打电话,我需要实现以下协议:

HTML链接:

<a href="tel:1-408-555-5555">1-408-555-5555</a>
Run Code Online (Sandbox Code Playgroud)

原生应用URL字符串:

tel:1-408-555-5555
Run Code Online (Sandbox Code Playgroud)

但是,在完成从UIWebView内的HTML链接发起的电话呼叫后,我将重定向到我的应用程序.但是在完成从本机应用程序URL字符串进行的电话呼叫后,我的iphone会保留在iphone的常规电话应用程序中,如果我想返回我的应用程序,我必须手动执行此操作.

据我所知,通过阅读其他人所说的话,没有办法改变这种行为.

这是我的问题:

  1. 从本机应用程序URL字符串拨打电话后,是否无法返回应用程序?
  2. 在我真的希望在完成电话呼叫后将用户重定向回我的应用程序的情况下,实现UIWebView而不是UILabel会有任何不利之处吗?

iphone objective-c uiwebview

27
推荐指数
3
解决办法
8993
查看次数

为什么我不能在原型函数中为"this"赋值?

我为什么这样做:

Array.prototype.foo = function() {
    this.splice(0, this.length);
    return this.concat([1,2,3]);
}
Run Code Online (Sandbox Code Playgroud)

但我不能这样做:

Array.prototype.foo = function() {
    return this = [1,2,3];
}
Run Code Online (Sandbox Code Playgroud)

这两个函数都会破坏它的值并将其更改为[1,2,3]但第二个函数会抛出以下错误:Uncaught ReferenceError: Invalid left-hand side in assignment

我怀疑这是因为允许赋值意味着我可能会将数组更改为其他内容(如字符串),但我希望有人确切知道和/或有更详细的解释.

javascript

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

rsync权限问题 - 目标权限未正确应用

这就是我想要做的:

rsync -rvl --chmod=ug=rwX,o=rX test /var/www
Run Code Online (Sandbox Code Playgroud)

在我这样做之后,我得到的结果如下:

drwxr-xr-x
Run Code Online (Sandbox Code Playgroud)

(实际上它是drwxr-sr-x,但这可能并不重要......是吗?)

这显然不是我想要的.我希望该组具有写权限,但由于某种原因,rsync命令不设置它们.

任何人有任何想法为什么不呢?我的语法有错吗?如果它有用,我将从OSX转移到Linux(Debian).

更新: 此外,如果它有用,当我输入umask时,我得到0002.所以这不是问题.

linux debian rsync

21
推荐指数
3
解决办法
4万
查看次数

如何在Objective-C中使用UIImage作为遮罩

我有一个全黑的UIImage,有一个alpha通道,所以有些部分是灰色的,有些部分是完全透明的.我希望将这些图像用作其他颜色的遮罩(让我们说白色以使其变得容易),因此最终产品现在是白色图像,其中部分透明.

我一直在四处寻找在苹果文档站点位置: http://developer.apple.com/library/mac/#documentation/GraphicsImaging/Conceptual/drawingwithquartz2d/dq_images/dq_images.html#//apple_ref/doc/uid/ TP30001066-CH212-CJBHIJEB

但我对Quartz/Core Graphics完全不熟悉,所以我不能真正理解这些例子.

有谁知道我可以用来查看一些完整代码示例的链接?

core-graphics objective-c quartz-2d

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