Нет необходимости использовать withRouter. Это работает для меня:
На родительской странице
<BrowserRouter>
<Switch>
<Route path="/routeA" render={(props)=> (
<ComponentA {...props} propDummy={50} />
)} />
<Route path="/routeB" render={(props)=> (
<ComponentB {...props} propWhatever={100} />
)} />
</Switch>
</BrowserRouter>
Затем в ComponentA или ComponentB вы можете получить доступ к
this.props.history
blockquote>, включая метод this.props.history.push.
Чтобы исключение было создано при построении объекта, в конструкторе
Посмотрите эту демонстрацию я написал: http://ideone.com/Mm5w5
class Main
{
public static void main (String[] args) throws java.lang.Exception
{
try
{ new Test(); } catch (Exception e) { e.printStackTrace(); }
try
{ new Test2(); } catch (Exception e) { e.printStackTrace(); }
try
{ new Test3(); } catch (Exception e) { e.printStackTrace(); }
}
static class Test
{
Object obj = getObject();
Object getObject()
{ throw new RuntimeException("getObject"); }
}
static class Test2
{
Test2()
{
throw new RuntimeException("constructor");
}
}
static class Test3
{
Object obj1 = null;
String str = obj1.toString();
}
}
Производит:
java.lang.RuntimeException: getObject
at Main$Test.getObject(Main.java:24)
at Main$Test.<init>(Main.java:22)
at Main.main(Main.java:9)
java.lang.RuntimeException: constructor
at Main$Test2.<init>(Main.java:31)
at Main.main(Main.java:12)
java.lang.NullPointerException
at Main$Test3.<init>(Main.java:38)
at Main.main(Main.java:15)
& lt; init>
blockquote>называется
Метод инициализации экземпляра
blockquote>, который создается вашим компилятором java от созданного вами конструктора. Хотя это неверное определение метода, ваш JVM ожидает этого, и все, что вы положили в конструктор, будет выполняться в методе. Поэтому, когда вы с исключением, вы можете быть уверены, что это из конструктора исполняемого Java-класса. Подробнее об этом читайте в статьях по дизайну Билла Веннера Инициализация объекта .