Вместо того, чтобы делать это усложнило, сохраните это простым и используйте toggleShow
на родительском компоненте и только смонтируйтесь Notification
, если шоу верно, передача в toggleShow
от родителя как опоры, чтобы смочь переключить это от нашего дочернего компонента
class Test extends React.Component {
constructor() {
super();
this.state = { show: false };
this.toggleShow = this.toggleShow.bind(this);
}
toggleShow() {
this.setState(prevState => ({ show: !prevState.show }));
}
render() {
return (
<div className="App">
<button onClick={this.toggleShow}>show the button</button>
{this.state.show && <Notification hideNotification={this.toggleShow} />}
</div>
);
}
}
const Notification = ({ hideNotification }) => (
<div className="test">
<div>
<button onClick={hideNotification}>Card</button>
</div>
</div>
);
Создайте UUID .
String uniqueID = UUID.randomUUID().toString();
Если вам нужны короткие, удобочитаемые идентификаторы и они должны быть уникальными только для каждого запуска JVM:
private static long idCounter = 0;
public static synchronized String createID()
{
return String.valueOf(idCounter++);
}
Изменить: Альтернатива, предложенная в комментариях - это зависит от -hood «магия» для обеспечения безопасности потоков, но более масштабируемая и такая же безопасная:
private static AtomicLong idCounter = new AtomicLong();
public static String createID()
{
return String.valueOf(idCounter.getAndIncrement());
}
Вот мои два цента: я ранее реализовал класс IdFactory
, который создавал идентификаторы в формате [имя хоста] - [время запуска приложения] - [текущее время] - [дискриминатор] . Это в значительной степени гарантировало, что идентификаторы были уникальными для экземпляров JVM, при этом идентификаторы оставались читаемыми (хотя и довольно длинными). Вот код на случай, если он пригодится:
public class IdFactoryImpl implements IdFactory {
private final String hostName;
private final long creationTimeMillis;
private long lastTimeMillis;
private long discriminator;
public IdFactoryImpl() throws UnknownHostException {
this.hostName = InetAddress.getLocalHost().getHostAddress();
this.creationTimeMillis = System.currentTimeMillis();
this.lastTimeMillis = creationTimeMillis;
}
public synchronized Serializable createId() {
String id;
long now = System.currentTimeMillis();
if (now == lastTimeMillis) {
++discriminator;
} else {
discriminator = 0;
}
// creationTimeMillis used to prevent multiple instances of the JVM
// running on the same host returning clashing IDs.
// The only way a clash could occur is if the applications started at
// exactly the same time.
id = String.format("%s-%d-%d-%d", hostName, creationTimeMillis, now, discriminator);
lastTimeMillis = now;
return id;
}
public static void main(String[] args) throws UnknownHostException {
IdFactory fact = new IdFactoryImpl();
for (int i=0; i<1000; ++i) {
System.err.println(fact.createId());
}
}
}