Интересно, может ли это быть объяснено лучше, чем статья в Википедии.
Основная проблема, которую вы пытаетесь решить с помощью представления двух дополнений, - это проблема сохранения отрицательных целых чисел.
Сначала рассмотрим целое число без знака, записанное в 4 бита. У вас может быть следующее
0000 = 0
0001 = 1
0010 = 2
...
1111 = 15
Они неподписанны, потому что нет указания на то, являются ли они отрицательными или положительными.
Чтобы сохранить отрицательные числа, вы можете попробовать несколько вещей. Во-первых, вы можете использовать нотацию знака знака, которая назначает первый бит в качестве знакового бита для представления +/- и остальных бит для представления величины. Таким образом, используя 4 бита снова и предполагая, что 1 означает - и 0 означает +, тогда у вас есть
0000 = +0
0001 = +1
0010 = +2
...
1000 = -0
1001 = -1
1111 = -7
. Итак, вы видите проблему там? У нас положительный и отрицательный 0. Большая проблема заключается в добавлении и вычитании двоичных чисел.
Что такое
0010
1001 +
----
?
Другая система - превышение нотации . Вы можете хранить отрицательные числа, вы избавляетесь от двух проблем с нулями, но сложение и вычитание остаются трудными.
Итак, идет два дополнения. Теперь вы можете хранить положительные и отрицательные целые числа и выполнять арифметику с относительной легкостью. Существует несколько способов преобразования числа в дополнение к двум. Вот один из них.
Итак, что, если вы хотите do 2 + (-3) в двоичном формате? 2 + (-3) - -1. Что бы вы сделали, если бы вы использовали значение знака для добавления этих чисел? 0010 + 1101 =?
Используя два дополнения, рассмотрим, насколько это было бы легко.
2 = 0010
-3 = 1101 +
-------------
-1 = 1111
Преобразование 1111 в десятичный: / g25]
Tada!
Прежде всего, постарайтесь не использовать метод componentWillMount, поскольку он не рекомендуется в React ( https://reactjs.org/docs/react-component.html#unsafe_componentwillmount )
[ 114] Я не понимаю, почему это не сработает при обновлении. Вам может не понадобиться ваш селектор как функция, и, возможно, вам нужно значение по умолчанию, чтобы гарантировать достоверность карты, которую вы делаете в React (может, в этом проблема?)
const makeSelectSchools = createSelector(
selectSchoolsContainerDomain, // What is this doing? Getting the state of the previous reducer right?
schoolState => schoolState.get('schools') || [],
);
И затем вызовите его в контейнере:
const mapStateToProps = createStructuredSelector({ schools: makeSelectSchools });
Вы уверены, что в вашей консоли больше нет журналов? Или в инструментах Redux для разработчиков? Его довольно сложно отладить, и я лично не вижу причин, по которым ваше приложение будет работать только во время первой загрузки (если вы не управляете кешем).
Надеясь, что эти маленькие отзывы помогут вам сузить проблему:)