小编Dan*_*mov的帖子

在与Backbone一起使用React时,我可以避免使用forceUpdate()吗?

Facebook React 鼓励您将mutable(state)和immutable(props)状态分开:

尽量保持尽可能多的组件无状态.通过这样做,您可以将状态隔离到最合理的位置,并最大限度地减少冗余,从而更容易推断您的应用程序.

当状态改变时,您应该调用setState触发虚拟DOM diff,这将仅在需要时才会导致真正的DOM更新.

还有就是通过调用手动触发DOM更新的方式forceUpdate,但它气馁:

通常你应该尽量避免使用forceUpdate()和只读取this.propsthis.state使用render().这使您的应用程序更简单,更高效.

但是,我看到的所有React + Backbone示例都忽略了这个建议并将模型和集合存储在props并调用forceUpdate:

甚至React自己的例子也使用forceUpdate:

有没有更好的方法,它会带来什么好处?

javascript backbone.js reactjs

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

C#现有对象上的'new'关键字

我想知道一旦对象被重新分配,对象(在C#中)会发生什么.例:

Car c = new Car("Red Car");
c = new Car("Blue Car");
Run Code Online (Sandbox Code Playgroud)

由于引用被重用,垃圾收集器在失去引用之后是否处理/处理'Red Car'?或者是否需要采用单独的方法来处理"红色汽车"?

我主要想知道因为我将要回收一个相对较大的对象,并且需要知道在重新创建时是否还有任何应该完成的事情.

c# garbage-collection object new-operator

34
推荐指数
5
解决办法
5197
查看次数

这是MonoTouch GC中的错误吗?

注意:我创建了一个简单的项目 - 您可以看到故事板之间UIButtonCustomButton故事板中的切换类型如何改变GC行为.

我正试图让我的脑袋缠绕着MonoTouch垃圾收集器.
该问题类似于MT 4.0中修复的问题,但是使用了继承类型.

为了说明它,请考虑两个视图控制器,父级和子级.

子视图包含一个UIButton可以随时写入控制台的视图.
Controller的Dispose方法会引发异常,因此很难错过.

这里是子视图控制器:

public override void ViewDidLoad ()
{
    base.ViewDidLoad ();

    sayHiButton.TouchUpInside += (sender, e) =>
        SayHi();
    }
}

void SayHi()
{
    Console.WriteLine("Hi");
}

protected override void Dispose (bool disposing)
{
    throw new Exception("Hey! I've just been collected.");
    base.Dispose (disposing);
}
Run Code Online (Sandbox Code Playgroud)

父视图控制器只显示子控制器并设置一个计时器来关闭它并运行GC:

public override void ViewDidLoad ()
{
    base.ViewDidLoad ();

    var child = (ChildViewController)Storyboard.InstantiateViewController("ChildViewController");

    NSTimer.CreateScheduledTimer(2, () => {
        DismissViewController(false, null);
        GC.Collect();
    }); …
Run Code Online (Sandbox Code Playgroud)

garbage-collection xamarin.ios xamarin

33
推荐指数
1
解决办法
9408
查看次数

webpack dev服务器CORS问题

webpack-dev-server v1.10.1用来提升我的Redux项目,我有以下选项:

contentBase: `http://${config.HOST}:${config.PORT}`,
quiet: false,
noInfo: true,
hot: true,
inline: true,
lazy: false,
publicPath: configWebpack.output.publicPath,
headers: {"Access-Control-Allow-Origin": "*"},
stats: {colors: true}
Run Code Online (Sandbox Code Playgroud)

在JS中,我使用requestfrom superagent来生成HTTP GET调用

request
          .get(config.APIHost + apiUrl)
          .set('Accept', 'application/json')
          .withCredentials()
          .end(function (err, res) {
                if (!err && res.body) {
                    disptach(() => {
                        return {
                            type: actionType || GET_DATA,
                            payload: {
                                response: res.body
                            }
                        }
                    });
                }
          });
Run Code Online (Sandbox Code Playgroud)

但是我收到了CORS错误:

XMLHttpRequest cannot load http://localhost:8000/api/getContentByType?category=all. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:5050' …
Run Code Online (Sandbox Code Playgroud)

cors superagent reactjs webpack-dev-server

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

在Django中,你可以为查询集添加一个方法吗?

在Django中,如果我有一个模型类,例如

from django.db import models

class Transaction(models.Model):
    ...
Run Code Online (Sandbox Code Playgroud)

然后,如果我想向模型添加方法,存储例如相当复杂的过滤器,我可以添加自定义模型管理器,例如

class TransactionManager(models.Manager):

    def reasonably_complex_filter(self):
        return self.get_query_set().filter(...)


class Transaction(models.Model):
    objects = TransactionManager()
Run Code Online (Sandbox Code Playgroud)

然后我可以这样做:

>>> Transaction.objects.reasonably_complex_filter()
Run Code Online (Sandbox Code Playgroud)

有什么办法可以添加一个可以链接到模型查询集末尾的自定义方法吗?

即添加自定义方法,以便我可以这样做:

>>> Transaction.objects.filter(...).reasonably_complex_filter()
Run Code Online (Sandbox Code Playgroud)

python django django-queryset

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

如何在React应用程序中更新document.title?

由于React没有任何内置的管理方法document.title,我曾经在componentDidMount路由处理程序中设置它.

但是现在我需要根据state异步提取修改标题.我开始投入分配componentDidUpdate,但我时不时地忘记将document.title作业放到某些页面中,之前的标题一直存在,直到我终于注意到它为止.

理想情况下,我想要一种以document.title声明方式表达的方式,而不必分配它.鉴于我希望能够在几个嵌套级别指定文档标题,某种"假"组件可能是最方便的:

  • 在顶层(默认标题);
  • 在页面级别(对于某些页面,但不是全部);
  • 有时,在内部组件级别(例如,用户键入字段).

其他要求:

  • 子项中指定的标题应覆盖父项指定的标题;
  • 可靠(保证路线变更时的清理);
  • 不应该发出任何DOM(即没有组件返回的黑客<noscript>);
  • 我正在使用react-router,但如果这个组件也可以与其他路由器一起工作,那就更好了.

我能用什么?

javascript dom reactjs react-router

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

使用React时的TypeError:无法读取未定义的属性"firstChild"

有时,当使用React库,例如react-router时,我收到此错误:

未捕获的TypeError:无法读取未定义的属性'firstChild'/~/
react-router/~/react/lib/ReactMount.js?:606

我如何解决它?

javascript reactjs react-router

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

HTML5占位符在焦点上消失

是否有一个免费提供的jQuery插件可以改变placeholder行为以匹配HTML5规范?

聚焦之前
镀铬未聚焦的占位符

关注焦点(Safari)
野生动物园聚焦占位符

焦点不好(Chrome,Firefox)
镀铬聚焦占位符

你可以用这个简单的小提琴你的浏览器做什么.

HTML5草案规范说:

用户代理在向其删除换行符之后,当元素的值为空字符串和/或控件未聚焦时(例如,通过将其显示在空白的未聚焦控件内并以其他方式隐藏),应向用户显示此提示.

"/或"在当前草案中是新的,所以我想这就是为什么Chrome和Firefox还不支持它.请参阅WebKit错误#73629,Chromium bug#103025.

safari html5 focus placeholder jquery-plugins

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

什么是复杂动画的良好抽象?

您如何设计和实现复杂的UI交互动画?

(我不是在讨论像jQuery或UIKit这样的特定语言和库,除非它们强迫你以特定的方式思考管理相互依赖的动画,我感兴趣.)

考虑一个看似"简单"的任务,比如设计和编程iOS主屏幕.

iOS主屏幕

然而,隐藏复杂性的程度令人震惊.
我注意到关于界面的一些事情:

  • 当您几乎没有触摸图标时,其不透明度会发生变化,但尺寸更改会延迟.
  • 如果您在其他两个应用之间拖动应用,则在重新排列所有应用以移动可用空间之前会有明显的延迟.因此,如果您只是在屏幕上移动应用程序,那么在您解决之前不会发生任何事情.
  • 重新排列是逐行进行的,首先是你盘旋的线,它会触发链中的下一行,直到前面的空闲空间.
  • 如果你删除一个应用程序,它将会在现在可用的空间中掉落,而不仅仅是丢弃它的位置.
  • 如果您将应用程序悬停在另一个应用程序上,则会出现径向光,闪烁两次,然后才会创建一个组.
  • 如果该组是在自由空间中创建的,然后被丢弃,则会在放弃时动画留下以占据自由空间.

我确信这里有更多的复杂性,我没有注意到.

连续动画与离散动作

在粗略的概括,为每一对(animation, user_action)在同一界面环境下,你需要决定是否有什么user_action情况发生,而animation已经运行.

在大多数情况下,你可以

  • 取消动画;
  • 随时改变动画;
  • 忽略行动;
  • 将动作排队到动画结束时.

但是在动画期间可能会有几个动作,你必须决定在动画结束时丢弃哪些动作,排队哪些动作,以及是否执行所有排队动作,或者只执行最后一个动作.

如果在动画完成时某些内容排队,并且动画发生了变化,则需要确定排队的操作是否仍然有意义,或者是否需要删除.

如果这听起来太理论化,请考虑一个现实世界的例子:你如何处理用户向下拖动应用程序,等待重新排列开始,然后立即向上拖动应用程序并释放它?如何确保动画在每种可能的情况下都流畅可靠?

适合工作的正确工具

我发现自己甚至无法保留一半可能的情景.随着UI的表现力增加,可能状态的数量开始猛烈地违反7±2规则.

因此,我的问题如下:

你如何控制设计和实现动画的复杂性?

我既想找到解决问题的有效方法,也想找到解决问题的方法.

作为一个例子,事件和观察者被证明是大多数UI的非常有效的抽象.
但是,您能否依靠事件作为主要抽象来设计和实现类似iOS的拖放式屏幕?

代码必须多么纠结才能准确地表示UI的所有可能状态?它是一个事件处理程序添加另一个事件处理程序当一些布尔变量对于将其设置为false的函数为真时,除非在它之前运行另一个事件处理程序吗?

"你有没有听说过课程?"你可能想知道.为什么,我有,但这些类需要分享的状态太多了.

总而言之,我正在寻找与语言无关(尽管可能是语言或框架启发的)技术,用于管理顺序或同时发生的复杂的相互依赖,可取消,动画,并描述它们如何对用户操作做出反应.

(所有这一切都考虑到我不需要自己编写动画 - 也就是说,我确实可以访问像jQuery或Core Animation这样的框架,animate(styles, callback)对我而言,我可以cancel做到这一点.)

数据结构,设计模式,DSL如果有助于解决这些问题,那么它们都很好.

language-agnostic user-interface animation abstraction design-patterns

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

如何使用Redux Saga测试API请求失败?

我试图测试我的传奇可以遵循的每个场景,但我无法实现我想要的行为.这很简单,我有一个HTTP请求(登录),我想通过模拟我的API方法来测试成功和失败的情况.

但是,它看起来call effect不会激活我的api功能,我还没有真正得到它是​​如何工作的,但我想中间件是负责调用该功能,因为我不去通过商店我的测试,我无法得到结果.

所以我的问题是,当您需要在异步调用旁边发送不同的操作(通常是成功或失败)时,如何测试您的传奇?

我找了一个例子,我发现sagas成功并失败但是失败案例从未经过测试,例如在这里的购物车示例中

SAGA.JS

export function* login(action) {
  try {
    const user = yield call(api.login, action);
    return yield put(actions.loginSuccess(user));
  } catch(e) {
    yield put(actions.loginFail(e));
  }
}

export default function* rootAuthenticationSagas() {
  yield* takeLatest(LOGIN, login);
}
Run Code Online (Sandbox Code Playgroud)

TEST.JS

describe('login', () => {
  context('When it fails', () => {
    before('Stub the api', () => {
      sinon.stub(api, 'login', () => {
        // IT NEVER COMES HERE !
        return Promise.reject({ error: 'user not found' });
      });
    });

    it('should return …
Run Code Online (Sandbox Code Playgroud)

javascript generator reactjs redux redux-saga

27
推荐指数
2
解决办法
7888
查看次数