在import React from 'react';
import classnames from 'classnames/bind';
import styles from './NoDataComponent.css';
const cx = classnames.bind(styles);
export const NoDataComponent: React.SFC = props => {
const { children } = props;
return (
<div className={cx('rt-noData', 'error')}>{children}</div>
// one can insert 'error' class based on what children has but that's hacky
);
};
模块中,我们有一个名为DynamicSupervisor
的函数,该函数注册一个孩子并启动它。我的问题是:以后如何才能按名称找到特定的子进程,因为例如start_child
函数仅将atom作为参数,而我不想使用atom来命名子进程,因此我将它们命名为元组,例如< / p>
答案 0 :(得分:0)
没有通用解决方案AFAIK。您可以通过两种方法进行管理。
如果您DynamicSupervisor
的所有子代都是不同的模块,请使用DynamicSupervisor.which_children/1
列出子代,并根据模块名称对最后一个参数进行模式匹配。
否则,您应该使用:via
元组为孩子命名,并维护自己的替代注册表来查找孩子。
答案 1 :(得分:0)
您可以使用Registry module and the :via tuple
在上面的示例中,您可以将Agent
替换为您的子模块。
{:ok, _} = Registry.start_link(keys: :unique, name: Registry.ViaTest)
name = {:via, Registry, {Registry.ViaTest, "my_child_name"}}
{:ok, _} = Agent.start_link(fn -> 0 end, name: name)
Agent.get(name, & &1)
#=> 0
Agent.update(name, &(&1 + 1))
Agent.get(name, & &1)
#=> 1
Registry.lookup(Registry.ViaTest, "my_child_name")
#=> [{self(), nil}]
此示例使用字符串作为键("my_child_name"
),但是它可以是任何长生不老药术语,例如元组。