Вам также необходимо использовать компонент Provider
где-то выше компонента MyContext.Consumer
.
Пример
const initialState = {
ve: "randomValue"
};
const MyContext = React.createContext();
class MyProvider extends React.Component {
constructor(props) {
super(props);
this.state = initialState;
}
render() {
return (
<MyContext.Provider
value={{
state: this.state
}}
>
{this.props.children}
</MyContext.Provider>
);
}
}
class App extends React.Component {
render() {
return (
<MyProvider>
<MyContext.Consumer>
{context => <div>{JSON.stringify(context)}</div>}
</MyContext.Consumer>
</MyProvider>
);
}
}
ReactDOM.render(<App />, document.getElementById("root"));
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.6.3/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.6.3/umd/react-dom.production.min.js"></script>
<div id="root"></div>
Потому что они делали это в спешке на заре Java и не понимали, какие последствия будут иметь четыре версии позже.
Дженерики должны были быть частью дизайна. Java с самого начала, но эта функция была исключена как слишком сложная и в то время ненужная. В результате большая часть кода в стандартных библиотеках написана с предположением неуниверсальных коллекций. Потребовался прототип языка «Pizza» от Мартина Одерски, чтобы показать, как они могут быть выполнены достаточно хорошо, сохраняя при этом почти идеальную обратную совместимость как с кодом Java, так и с байт-кодом. Прототип привел к Java 5, в которой классы коллекций были модернизированы с помощью дженериков таким образом, чтобы старый код продолжал работать.
К сожалению, если бы они задним числом заставили Свойства
унаследовать от Map
, то следующий ранее действующий код перестал бы работать:
Map<Object, Object> x = new Properties()
x.put("flag", true)
Почему кто-то будет это делать, я не понимаю, но стремление Sun к обратной совместимости в Java вышло за рамки героического и превратилось в бессмысленное.
Наиболее образованные наблюдатели оценили то, что Properties
вообще никогда не должны были унаследовать от Map
. Вместо этого он должен обернуть вокруг Map
, показывая только те особенности Map, которые имеют смысл.
С тех пор, как заново изобрел Java, Мартин Одерски создал новый язык Scala, который является более чистым, наследует меньше ошибок, и открывает новые горизонты во многих областях. Если вас раздражают мелочи Java, взгляните на нее.
тогда следующий ранее действующий код перестал бы работать:Map<Object, Object> x = new Properties()
x.put("flag", true)
Я не понимаю, почему кто-то будет это делать, но стремление Sun к обратной совместимости в Java вышло за рамки героического и превратилось в бессмысленное.
Сейчас наиболее образованные наблюдатели оценивают то, что Свойства
никогда не должны были наследоваться от Карты
. Вместо этого он должен обернуть вокруг Map
, показывая только те особенности Map, которые имеют смысл.
С тех пор, как заново изобрел Java, Мартин Одерски создал новый язык Scala, который является более чистым, наследует меньше ошибок, и открывает новые горизонты во многих областях. Если вас раздражают мелочи Java, взгляните на нее.
тогда следующий ранее действующий код перестал бы работать:Map<Object, Object> x = new Properties()
x.put("flag", true)
Я не понимаю, почему кто-то будет это делать, но стремление Sun к обратной совместимости в Java вышло за рамки героического и превратилось в бессмысленное.
Сейчас наиболее образованные наблюдатели оценивают то, что Свойства
никогда не должны были наследоваться от Карты
. Вместо этого он должен обернуть вокруг Map
, показывая только те особенности Map, которые имеют смысл.
С тех пор, как заново изобрел Java, Мартин Одерски создал новый язык Scala, который является более чистым, наследует меньше ошибок, и открывает новые горизонты во многих областях. Если вас раздражают мелочи Java, взгляните на нее.
Приверженность Java к обратной совместимости перешла от героического к бессмысленному. Наиболее образованные наблюдатели оценили то, что Properties
никогда не должны были наследовать от Map
. Вместо этого он должен обернуть вокруг Map
, показывая только те особенности Map, которые имеют смысл.
С тех пор, как заново изобрел Java, Мартин Одерски создал новый язык Scala, который является более чистым, наследует меньше ошибок, и открывает новые горизонты во многих областях. Если вас раздражают мелочи Java, взгляните на нее.
Приверженность Java к обратной совместимости перешла от героического к бессмысленному. Наиболее образованные наблюдатели оценили то, что Properties
никогда не должны были наследовать от Map
. Вместо этого он должен обернуть вокруг Map
, показывая только те особенности Map, которые имеют смысл.
С тех пор, как заново изобрел Java, Мартин Одерски создал новый язык Scala, который является более чистым, наследует меньше ошибок, и открывает новые горизонты во многих областях. Если вас раздражают мелочи Java, взгляните на нее.
Вместо этого он должен обернуть вокруг Map
, показывая только те особенности Map, которые имеют смысл.
С тех пор, как заново изобрел Java, Мартин Одерски создал новый язык Scala, который является более чистым, наследует меньше ошибок, и открывает новые горизонты во многих областях. Если вас раздражают мелочи Java, взгляните на нее.
Вместо этого он должен обернуть вокруг Map
, показывая только те особенности Map, которые имеют смысл.
С тех пор, как заново изобрел Java, Мартин Одерски создал новый язык Scala, который является более чистым, наследует меньше ошибок, и открывает новые горизонты во многих областях. Если вас раздражают мелочи Java, взгляните на нее.
Первоначально предполагалось, что Свойства
действительно будут расширять Hashtable
. К сожалению, реализация мостовых методов вызвала проблему. Свойства
, определенные таким образом, заставляют javac генерировать синтетические методы. Свойства
должны определять, скажем, метод get
, который возвращает String
, но должен переопределить метод, возвращающий Object
. Итак, добавлен метод синтетического моста.
Предположим, у вас есть класс, написанный в старые добрые 1,4 дня. Вы переопределили некоторые методы в Properties
. Но то, что вы не сделали, - это переопределить новые методы. Это приводит к непреднамеренному поведению. Чтобы избежать этих методов моста, Свойства
расширяет Hashtable
. Аналогично Iterable
не возвращает (только для чтения) SimpleIterable
, потому что это добавило бы методы к реализациям Collection
.
The reason: Liskov substitution principle and backwards compatibility. Properties
extends Hashtable
and thus must accept all messages that Hashtable
would accept - and that means accepting put(Object, Object)
. And it has to extend plain Hashtable
instead of Hashtable
because Generics were implemented in the downwards-compatibe way via type erasure, so once the compiler has done its thing, there are no generics.