小编spa*_*azm的帖子

了解 React Hooks 'exhaustive-deps' lint 规则

我很难理解 'exhaustive-deps' lint 规则。

我已经阅读了这篇文章这篇文章,但我找不到答案。

这是一个带有 lint 问题的简单 React 组件:

const MyCustomComponent = ({onChange}) => {
    const [value, setValue] = useState('');

    useEffect(() => {
        onChange(value);
    }, [value]);

    return (
        <input 
           value={value} 
           type='text' 
           onChange={(event) => setValue(event.target.value)}>
        </input>
    )
} 
Run Code Online (Sandbox Code Playgroud)

它需要我添加onChangeuseEffect依赖项数组。但在我的理解中onChange永远不会改变,所以它不应该存在。

通常我是这样管理的:

const MyCustomComponent = ({onChange}) => {
    const [value, setValue] = useState('');

    const handleChange = (event) => {
        setValue(event.target.value);
        onChange(event.target.value)
    }

    return (
        <input 
           value={value} 
           type='text'
           onChange={handleChange}>
        </input> ?
    )
} …
Run Code Online (Sandbox Code Playgroud)

reactjs eslint react-hooks

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

在React Router上,如何保持登录状态甚至刷新页面?

我正在使用React和React Router与Redux建立网站.许多路由(页面)需要登录.如果用户未登录,我可以重定向到登录:

function requireAuth(nextState, replace) {
    let loggedIn = store.getState().AppReducer.UserReducer.loggedIn;

    if(!loggedIn) {
        replace({
            pathname: '/login',
            state: {
                nextpathname: nextState.location.pathname
            }
        });
    }
}

ReactDOM.render(
    <Provider store={store}>
        <Router history={history}>
            <Route path="/" component={App}>
                <IndexRoute component={Index} />
                <Route path="login" component={Login} />
                <Route path="register" component={Register} />
                <Route path="dashboard" component={Graph} onEnter={requireAuth}>
                    ... some other route requires logged in ...
                </Route>
            </Route>
        </Router>
    </Provider>,
    document.getElementById('entry')
);
Run Code Online (Sandbox Code Playgroud)

如果用户没有登录,请查看代码,我使用onEnter挂钩重定向到'/ login'路由.用于检查用户登录的数据是在商店中,并且在用户登录后它将更新.

它工作得很好,但问题是当我刷新页面时,存储将被重置并且用户没有登录状态.

我知道这是因为Redux存储只是内存存储,所以refesh页面会丢失所有数据.

检查服务器会话每次刷新都可以工作,但这可能是太多的请求,所以这看起来不错.

将登录状态数据保存到localStorage可能有效,但在这种情况下,我应该检查每个AJAX调用失败该请求被拒绝,因为会话已过期或不存在像某些东西,这看起来也是个坏主意.

有没有办法更清楚地解决这个问题?我的网站将会使用很多人,所以我希望尽可能减少XHR呼叫.

任何建议将非常感谢.

javascript local-storage reactjs react-router react-redux

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

"refs/heads/master"和Git中的"refs/remotes/origin/master"相同吗?

问题很简单:是refs/heads/master一回事refs/remotes/origin/master吗?如果不是在某些情况下,我怎么知道它何时不存在又是什么呢?

git

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

如何在Amazon EC2上使用自动扩展设置ElasticSearch集群?

关于在Amazon EC2上配置ES的ec2有一个很棒的教程弹性搜索.我研究了它并应用了所有建议.

现在我有了AMI,可以从这个AMI在集群中运行任意数量的节点.配置自动发现,节点按照实际应该加入群集.

问题是如何配置集群,我可以根据集群负载自动启动/终止节点?

例如,当我们没有任何负载且12个节点在峰值负载上运行时,我希望只有1个节点在运行.但是等等,如果我终止集群中的11个节点,那么分片和副本会发生什么?如果我终止12个节点中的11个节点,如何确保我不会丢失群集中的任何数据?

我可能想为此配置S3网关.但是除了本地之外的所有网关都被弃用了.

手册中有一篇关于分片分配的文章.可能是我遗漏了一些非常基本的东西但是我应该承认我没有弄清楚是否可以配置一个节点来始终保存所有分片副本.我的目标是确保如果这是集群中唯一运行的节点,我们仍然不会丢失任何数据.

我现在能想到的唯一解决方案是配置索引以包含12个分片和12个副本.然后,当最多启动12个节点时,每个节点都会有每个分片的副本.但是我不喜欢这个解决方案,因为如果我想在峰值负载上有超过12个节点,我将不得不重新配置集群.

elasticsearch

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

PHP有自动修复吗?

搜索PHP.net进行自动更新无法获得任何结果.在撰写本文时,维基百科声称只有Perl拥有它.在Google搜索"php autovivification" 时,没有明确的确定结果.

这个PHP代码运行正常:

$test['a'][4][6]['b'] = "hello world";
var_dump($test);

array
  'a' => 
    array
      4 => 
        array
          'b' => 
            array
              ...
Run Code Online (Sandbox Code Playgroud)

任何人都可以提供PHP确实具有此功能的规范答案(最好使用引用),以及任何细节,例如它引入的版本,怪癖,快捷方式等?

php perl autovivification

17
推荐指数
1
解决办法
632
查看次数

Codeigniter会话死了

在我的系统中使用了一点点(25分钟 - 1.5小时)之后,用户会受到一些冲击.出于某种原因,我的会议有点染色.我认为客户端的cookie以某种方式丢失会话ID并创建一个新的.我正在保存我的会话数据Database.

这是我的会议conf:

        $config['sess_cookie_name']     = 'v2Session';
        $config['sess_expiration']      = 32400; //session will be 9 hours, for a shift.
        $config['sess_expire_on_close'] = FALSE;
        $config['sess_encrypt_cookie']  = TRUE;
        $config['sess_use_database']    = TRUE;
        $config['sess_table_name']      = 'ci_sessions';
        $config['sess_match_ip']        = TRUE;
        $config['sess_match_useragent'] = TRUE;
        $config['sess_time_to_update']  = 300;
Run Code Online (Sandbox Code Playgroud)

现在,当我查看数据库时,我看到每个用户有多个会话.每次踢都意味着一个新会话,旧会话在到期之前不会被删除.当会话"分离"时,用户需要再次登录.

任何帮助进行故障排除将不胜感激.

编辑:

因此经过一些研究后我发现会话因为session_id保存在会话中而死,cookie并且session_id会保存在database不匹配的会话中.我怀疑当用户在不同的选项卡/窗口上加载2个页面时会发生这种情况.一个加载发生在会话更新session_id和第二个加载(杀死会话)时session_id.系统在中查找会话database但未找到.结果:从系统+疯狂用户中踢出.

有没有人经历过这个?有没有人知道如何解决这个问题?

php session codeigniter

10
推荐指数
1
解决办法
8361
查看次数

在git rebase期间找到分支名称

什么?

有没有一种方法可以在交互式rebase期间找到被重新分支的名称,这比解析要好.git/rebase-merge/head-name

细节

通常我git rev-parse --abbrev-ref HEAD用来获取分支名称。但是在重新设置基准期间,分支处于独立的head状态,并且rev-parse返回HEAD

因此,现在我解析该.git/rebase-merge/head-name文件(如果存在)以提取分支名称。是否有一种方法(瓷器或其他方法)来获取此数据?

用法:

git checkout "the_branch_name_I_want"
git rebase -i "some_other_branch_sha_etc"
# mark commit for edit ...
git magic-command # I'd like to get back "the_branch_name_I_want"
git rebase --continue
Run Code Online (Sandbox Code Playgroud)

为什么?

我为什么要这样做?

我存储有关分支的元数据,并将其提取到我的commit-msg钩子中以附加到提交消息中。我希望在交互式重定基础期间reword阅读或edit阅读我的提交消息时可以使用此功能。

码:

branch=$(git rev-parse --abbrev-ref HEAD 2>/dev/null)
if [ "$?" -ne 0 ]; then
    echo "not in a git repo!"
    exit 2
fi
if [ "$branch" = "HEAD" ]; then …
Run Code Online (Sandbox Code Playgroud)

git git-rebase git-branch

7
推荐指数
2
解决办法
756
查看次数

如何使用php运行多个beanstalk worker

截至目前,我只为我的项目运行一个beanstalk工作线程,该线程处理基于cron的作业和实时作业.所以,我想把它分成两个工人.一个工作程序用于跟踪基于cron的作业,另一个工作程序用于跟踪实时异步作业.这样,工人的效率就会提高.任何人都可以帮助我,

  1. 如何使用PHP运行和deamonize多个beanstalk工作者?
  2. 一个处理多个beanstalk工作者的示例脚本?

注意:目前我正在使用pheanstalk php lib.

php beanstalkd

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

如何在不丢失物品的情况下暂停Observable?

Observable每秒都会发出一个滴答声:

Observable.interval(0, 1, TimeUnit.SECONDS)
    .take(durationInSeconds + 1));
Run Code Online (Sandbox Code Playgroud)

我想暂停这个Observable,以便它停止发出数字,并按需恢复它.

有一些陷阱:

  • 根据ObservableJavadoc,interval操作员不支持背压
  • 关于背压的RxJava wiki 有一个关于Callstack阻塞的部分作为背压的流量控制替代方案:

处理过度生产的Observable的另一种方法是阻止callstack(停止管理过度生产的Observable的线程).这具有违背Rx的"反应性"和非阻塞模型的缺点.但是,如果有问题的Observable位于可以安全阻止的线程上,这可能是一个可行的选择.目前,RxJava不会公开任何运营商来促进这一点.

有没有办法暂停一个intervalObservable?或者我应该用一些背压支持实现我自己的'滴答'Observable?

rx-java reactivex

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

在Python中读取文件时如何自动处理解压?

我正在编写一些 Python 代码,它循环访问多个文件并处理每个文件的前几百行。我想扩展此代码,以便如果列表中的任何文件被压缩,它会在读取它们时自动解压缩,以便我的代码始终接收解压缩的行。基本上我的代码目前看起来像:

for f in files:
    handle = open(f)
    process_file_contents(handle)
Run Code Online (Sandbox Code Playgroud)

是否有任何函数可以替换open上面的代码,以便如果f是纯文本或 gzip 压缩文本(或 bzip2 等),该函数将始终返回文件解压缩内容的文件句柄?(无需查找,只需顺序访问。)

python compression file-io python-2.7

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