小编agc*_*nti的帖子

`useState`,仅当对象中的值发生变化时才更新组件

问题

useState 即使数据的值没有改变,也总是触发更新。

这是问题的工作演示:demo

背景

我正在使用useState钩子来更新一个对象,我试图让它只在该对象中的值发生变化时才更新。因为 React 使用Object.is比较算法来决定什么时候应该更新;具有等效值的对象仍然会导致组件重新渲染,因为它们是不同的对象。

前任。即使有效载荷的值保持不变,该组件也将始终重新渲染{ foo: 'bar' }

const UseStateWithNewObject = () => {
  const [payload, setPayload] = useState({});
  useEffect(
    () => {
      setInterval(() => {
        setPayload({ foo: 'bar' });
      }, 500);
    },
    [setPayload]
  );

  renderCountNewObject += 1;
  return <h3>A new object, even with the same values, will always cause a render: {renderCountNewObject}</h3>;
};
Run Code Online (Sandbox Code Playgroud)

有没有我可以shouldComponentUpdate用钩子实现类似的东西来告诉反应只在数据更改时重新渲染我的组件?

javascript reactjs react-hooks

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

ImportError:没有名为rest_framework.authtoken的模块

我在我的项目中使用django rest-framework,(DRF),令牌认证来创建用户时创建令牌.一切都很好,直到我从DRF文档添加这一行:

url(r'^api-token-auth/', 'rest_framework.authtoken.views.obtain_auth_token'),
Run Code Online (Sandbox Code Playgroud)

创建一个端点,在正确发布用户名和密码后返回用户的令牌.

它抛出此错误:

ImportError: No module named rest_framework.authtoken
Run Code Online (Sandbox Code Playgroud)

这很奇怪,因为DRF在这条线上很好,所以它必须包含在我的PYTHONPATH中.

我还运行python manage.py syncdb了适当的迁移.

知道什么可能是错的吗?

Settings.py:

THIRD_PARTY_APPS = (
        'south',  # Database migration helpers:
        'crispy_forms',  # Form layouts
        'avatar',  # for user avatars
        'rest_framework', # for rest
        'django_rq', # for aysnc
        'rest_framework_swagger', # for exploring the api
        'rest_framework.authtoken',
    )
INSTALLED_APPS = DJANGO_APPS + THIRD_PARTY_APPS + LOCAL_APPS
Run Code Online (Sandbox Code Playgroud)

完整堆栈跟踪:

Unhandled exception in thread started by <function wrapper at 0x1046096e0>
Traceback (most recent call last):
  File "/Users/admin/dev/ncla-web/env/lib/python2.7/site-packages/django/utils/autoreload.py", line 93, in …
Run Code Online (Sandbox Code Playgroud)

python django django-rest-framework

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

熊猫合并错误:MemoryError

问题:

我正在尝试将两个相对较小的数据集放在一起,但合并提出了一个MemoryError.我有两个国家贸易数据汇总数据集,我正在尝试合并密钥年份和国家,因此数据需要具有特殊性.遗憾的是concat,这个问题的使用和性能优势是不可能的,正如在这个问题的答案中所看到的:MemoryError与Python中的pandas大合并.

这是设置:

尝试合并:

df = merge(df, i, left_on=['year', 'ComTrade_CC'], right_on=["Year","Partner Code"])
Run Code Online (Sandbox Code Playgroud)

基本数据结构:

一世:

    Year    Reporter_Code   Trade_Flow_Code Partner_Code    Classification  Commodity Code  Quantity Unit Code  Supplementary Quantity  Netweight (kg)  Value   Estimation Code
0    2003    381     2   36  H2  070951  8   1274    1274    13810   0
1    2003    381     2   36  H2  070930  8   17150   17150   30626   0
2    2003    381     2   36  H2  0709    8   20493   20493   635840  0
3    2003    381     1   36  H2  0507 …
Run Code Online (Sandbox Code Playgroud)

python merge pandas

8
推荐指数
1
解决办法
5861
查看次数

将文件推送到不在我的git仓库中的Heroku.

问题:

我有一个passwords.py我需要推送到Heroku我的应用程序工作,但我不能将它提交到我的公共git仓库,因为那时任何人都可以查看我的密码.

密码是令牌/ secert_key的/ other_api_keys,以允许我的应用程序验证其对第三方api的请求.我将它们存储在base64编码中passwords.py,但是如果我将它推送到git编码,任何人都可以很容易地看到密码b64decode().

如何将我的密码文件推送到Heroku而不包含在我的公共git仓库中?

要么

如何在公共git仓库中安全地存储我的密码?

我尝试过的:

推单个文件的Git似乎不是一个选择.虽然使用任何类似的方法来编码/解码密码只会给我一种虚假的安全感.关于如何解决它的任何想法?谢谢!

python git heroku

6
推荐指数
1
解决办法
1752
查看次数

Pandas:df.groupby(x,y).apply()跨多个列参数错误

基本问题:

我有几个'过去'和'现在'变量,我想执行一个简单的百分比变化' '.例如:((exports_now - exports_past)/exports_past)).

这两个问题实现了这一点,但是当我尝试类似的方法时,我得到一个错误,我的函数增量获得了一个未知参数axis.

数据示例:

exports_ past    exports_ now    imports_ past    imports_ now    ect.(6 other pairs)
   .23               .45             .43             .22              1.23
   .13               .21             .47             .32               .23
    0                 0              .41             .42               .93
   .23               .66             .43             .22               .21
    0                .12             .47             .21              1.23
Run Code Online (Sandbox Code Playgroud)

在第一个问题的答案之后,

我的解决方案是使用这样的函数:

def deltas(row):
    '''
    simple pct change
    '''
    if int(row[0]) == 0 and int(row[1]) == 0:
        return 0
    elif int(row[0]) == 0:
        return np.nan
    else:
        return ((row[1] - row[0])/row[0]) …
Run Code Online (Sandbox Code Playgroud)

python pandas

6
推荐指数
1
解决办法
4272
查看次数

使用Werkzeug的Django交互式回溯,`manage.py runserver_plus`错误

问题

我正在尝试使用我的Django项目运行Django中包含的交互式Werkzeug调试器.python manage.py runserver_plus从命令行执行以使用调试器启动服务器后,我收到错误:

Unknown command: 'runserver_plus'
Type 'manage.py help' for usage.
Run Code Online (Sandbox Code Playgroud)

我正在使用virtualenv.以下是我安装的内容:

Django==1.5.2
Werkzeug==0.9.3
argparse==1.2.1
wsgiref==0.1.2
Run Code Online (Sandbox Code Playgroud)

看完Django文档和这个问题后,

如何在Heroku上托管的Django项目中使用Werkzeug交互式跟踪调试器?

即使我只是尝试在本地调试我的项目,一切都应该工作正常.我安装了Django,我安装了Werkzeug工具(即使我可能不需要),而且我正在运行正确的命令.

什么可能出错?这应该是一个非常直接的行动.

python django debugging werkzeug

6
推荐指数
1
解决办法
3380
查看次数

为什么比使用javascript片段更快地追加到DOM中尚未包含的元素?

考虑将这三个版本附加liul:

天真版本(慢20%):

var ul = document.getElementById('targetUl');

for (var i = 0; i < 200; i++) {
  var li = document.createElement('li');
  li.innerHTML = Math.random();
  ul.appendChild(li);
}
Run Code Online (Sandbox Code Playgroud)

使用JavaScript片段(慢4%):

var ul = document.getElementById('targetUl'),
    fragment = document.createDocumentFragment();

for (var i = 0; i < 200; i++) {
  var li = document.createElement('li');
  li.innerHTML = Math.random();
  fragment.appendChild(li);
}
ul.appendChild(fragment);
Run Code Online (Sandbox Code Playgroud)

附加到DOM中尚未存在的元素(快1.26%):

var ul = document.createElement('ul'),
    div = document.getElementById('targetDiv');

for (var i = 0; i < 200; i++) {
  var li = document.createElement('li');
  li.innerHTML …
Run Code Online (Sandbox Code Playgroud)

javascript

6
推荐指数
1
解决办法
883
查看次数

TypeError:Array.from不是函数

我正在关注的Angular.io documenation一旦应用程序在浏览器中运行,角2抛出一个写有角2.一个简单的"Hello World"应用程序TypeErrorangular2/src/browser_adapter.js.

一切似乎都正确设置.知道问题是什么吗?

安慰:

TypeError: Array.from is not a function
    at createArrayFromMap (http://localhost:3000/node_modules/angular2/src/facade/collection.js:61:42)
    at Function.MapWrapper.values (http://localhost:3000/node_modules/angular2/src/facade/collection.js:100:47)
    at _createListOfBindings (http://localhost:3000/node_modules/angular2/src/di/injector.js:769:36)
    at Function.Injector.resolve (http://localhost:3000/node_modules/angular2/src/di/injector.js:403:16)
    at Function.Injector.resolveAndCreate (http://localhost:3000/node_modules/angular2/src/di/injector.js:420:41)
    at _createAppInjector (http://localhost:3000/node_modules/angular2/src/core/application_common.js:291:39)
    at http://localhost:3000/node_modules/angular2/src/core/application_common.js:257:31
    at Zone.run (http://localhost:3000/node_modules/angular2/bundles/angular2.js:118:17)
    at Zone.run (http://localhost:3000/node_modules/angular2/src/core/zone/ng_zone.js:165:42)
    at NgZone.run (http://localhost:3000/node_modules/angular2/src/core/zone/ng_zone.js:112:40)BrowserDomAdapter.logError @ :3000/node_modules/angular2/src/dom/browser_adapter.js:71
Run Code Online (Sandbox Code Playgroud)

all.babel.js(符合es5 all.js):

import {Component, View, bootstrap} from 'angular2/angular2'

@Component({
  selector: 'helloworld'
})
@View({
  template: `<h1>Hello World!</h1>`
})
class HelloWorld {

}


bootstrap(HelloWorld)
Run Code Online (Sandbox Code Playgroud)

index.html的:

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>Angular 2 Hello World</title> …
Run Code Online (Sandbox Code Playgroud)

javascript angular

6
推荐指数
1
解决办法
4153
查看次数

Django @property计算模型字段:FieldError:无法解析关键字

我正在使用@Yauhen Yakimovich在此问题中使用的方法:

属性对Django模型字段有效吗?

具有模型字段,该模型字段是对不同模型的计算。

问题:

FieldError: Cannot resolve keyword 'rating' into field. Choices are: _rating
Run Code Online (Sandbox Code Playgroud)

当我尝试访问它时,rating模型字段inst被我的rating属性正确隐藏和覆盖,导致错误。

我的模特:

class Restaurant(models.Model):    
    ...
    ...
    @property
    def rating(self):
        from django.db.models import Avg
        return Review.objects.filter(restaurant=self.id).aggregate(Avg('rating'))['rating__avg']
Run Code Online (Sandbox Code Playgroud)

Yauhen的回答中的模型:

class MyModel(models.Model):
    __foo = models.CharField(max_length = 20, db_column='foo')
    bar = models.CharField(max_length = 20)

    @property
    def foo(self):
        if self.bar:
            return self.bar
        else:
            return self.__foo

    @foo.setter
    def foo(self, value):
        self.__foo = value
Run Code Online (Sandbox Code Playgroud)

关于如何正确隐藏rating字段和定义@property技术的任何想法?

更新:

我正在使用查询order_by()来呼叫ratingorder_by()在数据库级别,并且不了解我的财产。灵魂,请使用Python进行排序:

sorted(Restaurant.objects.filter(category=category[0]), key=lambda …
Run Code Online (Sandbox Code Playgroud)

python django

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

Django Unittests客户端登录:在测试套件中失败,但在Shell中失败

我正在对我的家庭观点进行基本测试.从shell中记录客户端时,同一行代码在使用测试套件时无法记录客户端.

使用Django测试套件时记录客户端的正确方法是什么?

要么

知道为什么客户端没有使用我当前的方法登录吗?

壳牌测试:

import unittest
from django.test.client import Client
from django.test.utils import setup_test_environment
setup_test_environment()

client = Client()
login = client.login(username='agconti', password='password')

# login --> evals to True
Run Code Online (Sandbox Code Playgroud)

Django测试套件:

#### View Tests ####
import unittest
from django.test.client import Client
from shopping_cart.models import Store, Order, Item, Transaction

class Home_ViewTest(unittest.TestCase):
    def setUp(self):
        self.client = Client()
        # login user
        login = self.client.login(username='agconti', password='password')
        # Check login
        self.assertEqual(login, True)

    def test_details(self):
        # get the home view
        response = self.client.get('/')      
        self.assertEqual(response.status_code, 200)

        # Check …
Run Code Online (Sandbox Code Playgroud)

python django unit-testing

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