Вы можете переместить выборку в отдельный метод, который вы вызываете как в componentDidMount
, так и в nextPic
.
Пример
class App extends React.Component {
state = {
meme: {},
num: 6
};
componentDidMount() {
this.fetchMeme();
}
fetchMeme = () => {
const url = `http://meme.com/${this.state.num}`;
fetch(url)
.then(resp => resp.json())
.then(data => {
this.setState({
meme: data
});
});
};
nextPic = () => {
this.setState({
num: this.state.num >= this.state.meme.totalMemes ? 1 : this.state.num + 1
}, this.fetchMeme);
};
render() {
return (
<div>
<h1>{this.state.meme.title}</h1>
<img key={this.state.num} src={this.state.meme.encodedurl} />
<button onClick={this.nextPic}>Next</button>
</div>
);
}
}
Void
стал конвенцией для универсального аргумента, что Вы не интересуетесь. Нет никакой причины, почему необходимо использовать любой другой тип non-instantiable, такой как System
.
Это также часто используется в, например Map
значения (хотя Collections.newSetFromMap
использование Boolean
как карты не должно принимать null
значения), и java.security.PrivilegedAction
.
я записал запись блога на Void
несколько лет назад.
Можно создать экземпляр Пустых отражений использования, но они ни для чего не полезны. Пусто способ указать, что общий метод ничего не возвращает.
Constructor<Void> constructor = Void.class.getDeclaredConstructor();
constructor.setAccessible(true);
Void v = constructor.newInstance();
System.out.println("I have a " + v);
печать что-то как
I have a java.lang.Void@75636731
Учитывая, что существует никакие общедоступные конструкторы , я сказал бы, что этому нельзя присвоить ничто кроме null
. Я только использовал его в качестве заполнителя для, "Я не должен использовать этот универсальный параметр" как Ваши шоу в качестве примера.
Это могло также использоваться в отражении, от того, что говорит Javadoc:
Пустой класс является uninstantiable классом заполнителя для содержания ссылки на Объект класса, представляющий ключевое слово Java пусто.
Все примитивные классы обертки (Integer
, Byte
, Boolean
, Double
, и т.д.) содержат ссылку на соответствующий примитивный класс в помехах TYPE
поле, например:
Integer.TYPE == int.class
Byte.TYPE == byte.class
Boolean.TYPE == boolean.class
Double.TYPE == double.class
Void
был первоначально создан как где-нибудь для помещения ссылки на эти void
тип:
Void.TYPE == void.class
Однако Вы ничего действительно не получаете при помощи Void.TYPE
. Когда Вы используете void.class
, намного более ясно, что Вы делаете что-то с эти void
тип.
Как в стороне, в прошлый раз, когда я попробовал его, , BeanShell не распознал void.class
, таким образом, необходимо использовать Void.TYPE
там.
Перед дженериками это было создано для API Reflection, для содержания TYPE, возвращенной Method.getReturnType () для пустого метода, соответствуя другим классам типа примитива.
РЕДАКТИРОВАНИЕ: От JavaDoc Пустоты: "Пустой класс является uninstantiable классом заполнителя для содержания ссылки на Объект класса, представляющий ключевое слово Java пусто". До Дженериков я знаю о том, чтобы быть бесполезном кроме отражения.