redux
Является управлением государственной библиотекой, как с другими рамкамиreact
не имеет прямого отношения, поэтомуredux
могут покинутьreact
Использование в других средах. Так как нет иreact
связанная логическая связь, поэтомуredux
Исходный код очень чистый, цель состоит в том, чтобы хорошо управлять данными. и действительно вreact
используется в проектеredux
, необходимо иметьreact-redux
в качестве разъема, для соединенияreact
а такжеredux
.
Я не виделredux
Перед исходным кодом, я думаю, посмотрите наredux
Это должно быть очень сложно, потому что я училсяredux
Как использовать, когда это былоredux
Ошеломлен таким количеством понятий. действительно просмотретьredux
Когда исходный код, вы найдетеredux
Содержание исходного кода довольно маленькое, объем кода также довольно небольшой, а качество кода довольно высокое, так что это очень полезный исходный код.
Структура каталогов
Вам не нужно смотреть на другие каталоги, просто посмотрите на него напрямую./src
Бар:
.\РЕДУКС\СРЦ │ applyMiddleware.js │ bindActionCreators.js │ combReducers.js │ compose.js │ createStore.js │ index.js │ └─утилиты actionTypes.js isPlainObject.js предупреждение.js
index.js
просто поставьapplyMiddleware.js
Подождите, пока коллекция не будет объединена и выставлена.utils
Поместите в него несколько вспомогательных функций. Таким образом, всего нужно прочитать пять документов, и эти пять документовredux
пять разоблаченныхAPI
.
// index.js
import createStore from './createStore'
import combineReducers from './combineReducers'
import bindActionCreators from './bindActionCreators'
import applyMiddleware from './applyMiddleware'
import compose from './compose'
import warning from './utils/warning'
import __DO_NOT_USE__ActionTypes from './utils/actionTypes'
// 忽略内容
export {
createStore,
combineReducers,
bindActionCreators,
applyMiddleware,
compose,
__DO_NOT_USE__ActionTypes
}
compose.js
пятьAPI
Единственная функция, которую можно использовать отдельно, — это функция композиции, обычно используемая в функциональном программировании.redux
Само по себе это не имеет большого значения, давайте сначала разберемся с некоторыми концепциями функционального программирования:
чистая функцияэто функция, которая при одних и тех же входных данных всегда будет получать одинаковые выходные данные без каких-либо наблюдаемых побочных эффектов.кодовая комбинация
Код:
export default function compose(...funcs) {
if (funcs.length === 0) {
return arg => arg
}
if (funcs.length === 1) {
return funcs[0]
}
return funcs.reduce((a, b) => (...args) => a(b(...args)))
}
фактическиcompose
Что делает функция?var a = fn1(fn2(fn3(fn4(x))))
Этот метод вложенного вызова изменен наvar a = compose(fn1,fn2,fn3,fn4)(x)
способ позвонить.
redux
изcompose
Реализация очень проста, используя массивreduce
метод,reduce
Использование может относиться кmdn.
Основной код состоит всего из одного предложения:return funcs.reduce((a,b) => (..args) => a(b(...args)))
Хотя я часто пишуreduce
функция, но все еще немного сбивает с толку этот код, поэтому вот реальный пример, чтобы увидеть, как эта функция выполняется:
import {compose} from 'redux'
let x = 10
function fn1 (x) {return x + 1}
function fn2(x) {return x + 2}
function fn3(x) {return x + 3}
function fn4(x) {return x + 4}
// 假设我这里想求得这样的值
let a = fn1(fn2(fn3(fn4(x)))) // 10 + 4 + 3 + 2 + 1 = 20
// 根据compose的功能,我们可以把上面的这条式子改成如下:
let composeFn = compose(fn1, fn2, fn3, fn4)
let b = composeFn(x) // 理论上也应该得到20
посмотриcompose(fn1, fn2, fn3, fn4)
согласно сcompose
Исходный код, по сути, выполняет:[fn1,fn2,fn3.fn4].reduce((a, b) => (...args) => a(b(...args)))
какой цикл | стоимость | значение б | возвращаемое значение |
---|---|---|---|
первый цикл | fn1 | fn2 | (...args) => fn1(fn2(...args)) |
второй цикл | (...args) => fn1(fn2(...args)) | fn3 | (...args) => fn1(fn2(fn3(...args))) |
Третий раунд | (...args) => fn1(fn2(fn3(...args))) | fn4 | (...args) => fn1(fn2(fn3(fn4(...args)))) |
Окончательное возвращаемое значение цикла равно(...args) => fn1(fn2(fn3(fn4(...args))))
. так послеcompose
После обработки функция принимает нужный нам формат.
Суммировать
compose
Функции распространены в функциональном программировании. здесьredux
даcompose
Реализация очень проста, но не так проста для понимания, в основном из-заArray.prototype.reduce
Функция не настолько искусна, а второй способ написания принимающей функции и возвращающей функции вкупе с несколькими последовательными=>
, легко увидеть головокружение.
Этоredux
Первая часть толкования, за которой следуют несколькоAPI
Поговори об этом. особенноapplyMiddleware
этоAPI
полезно для этогоcompose
В объединении промежуточного ПО тоже есть момент, который сложно понять.