В дополнение к тому, что уже было сказано, строковые литералы [т.е. строки, подобные "abcd"
, но не похожие на new String("abcd")
] в Java, интернированы - это означает, что каждый раз, когда вы ссылаетесь на «abcd», вы получаете ссылку на один экземпляр String
, а не новый каждый раз. Таким образом, у вас будет:
String a = "abcd";
String b = "abcd";
a == b; //True
, но если у вас есть
String a = new String("abcd");
String b = new String("abcd");
, то возможно иметь
a == b; // False
(и в случае необходимости Напоминаем, всегда используем .equals()
для сравнения строк, ==
тестов для физического равенства).
Interning Строковые литералы хороши, потому что они часто используются более одного раза. Например, рассмотрим (надуманный) код:
for (int i = 0; i < 10; i++) {
System.out.println("Next iteration");
}
Если бы у нас не было интернирования строк, «Следующая итерация» нужно было бы создать 10 раз, тогда как теперь он будет создан только один раз .
Если вы хотите манипулировать своим значением перед его использованием, но не можете объявить const в JSX, определите функцию для манипулирования им. Это просто и понятно:
doSomethingWithGender(gender) {
return gender + "some extra text";
}
render() {
return <div>
{ this.doSomethingWithGender(this.props.form.getFieldValue('product_gender')) }
</div>
}
Просто измените определение вашей переменной:
const x = this.props.form.getFieldValue('product_gender', x => console.log(x));