Я предполагаю, что код, который вы показываете, находится внутри метода render()
некоторого компонента React, так что у вас действительно есть состояние.
Обратите внимание, что атрибут component
в теге Route
ожидает значение, которое является функцией без аргументов. Компонент для визуализации является результатом функции . Но ничто не запрещает вам сделать какую-то работу до возврата значения. Я бы попробовал что-то вроде этого
<Route path={'/page1'} component={() => {
this.setState({headerTitle: ...what you want..., boldTitle: ...what you want...})
return <Page1 />
}}/>
. Если Page1
- это просто функция, измените строку «return» с помощью return Page1()
.
Вам необходимо привести хотя бы один из операндов к умножению. В момент завершения умножения система не знает, что вы планируете назначить для int64.
(Если только int64 не является собственным типом int для вашей конкретной системы, что кажется маловероятным)
Основной ответ: нет, он не будет делать то, что вы хотите.
Но он делает то, что ожидается.
Об математических операциях следует отметить две вещи:
Если компилятор заметит несоответствие между операндами, он будет преобразовать один из операндов так, чтобы оба соответствовали (см. Какие переменные я должен типизировать при выполнении математических операций в C / C ++? ). Примечание. Это делается независимо от того, что происходит с результатом.
Это зависит от того, что такое int32 и int64.
Короче, все целые числа повышаются до, по крайней мере, 'int 'size (который может составлять 64 бита) перед любыми арифметическими операциями и размером большего операнда для бинарных операторов, если он имеет более высокий ранг, чем int.
Как используется результат выражения (независимо от того, используется ли он или нет) он хранится в более широком виде) не имеет отношения к продвижению составных частей выражения.
Учитывая два числа a, b, и каждое число использует биты len_a и len_b.
Ваш тип выходных данных нуждается как минимум в : len_a и len_b бит.
В приведенном выше коде у вас есть два 31-битных числа (потому что INT_MAX - 1 = 0x7FFFFFFE использует 31 бит), и вам нужно будет типизировать один из них в int64_t, потому что он будет делать 32-битное умножение и переполнение перед преобразованием в int64_t.
Число битов, необходимых для умножения с фиксированной запятой:
len_output = howManyBits( a * b )
= len_a + len_b
Быстрый пример для демонстрации вышеуказанного правила в действии:
a = 7
len_a = 3
b = 7
len_b = 3
c = a * b
= 49 ( decimal )
= 0x31 ( hex )
len_c = howManyBits( 0x31 )
= 6
Вы можете написать функцию для подсчета битов. Или, если вы просто хотите быстро проверить работоспособность, чтобы подтвердить это, используйте что-то вроде Windows Calc, которое преобразует число в двоичную форму и подсчитывает используемые биты.
См .: 14. Смешанное использование простых целочисленных типов и memsize-типов. http://www.viva64.com/art-1-2-599168895.html