Понимание, когда и как использовать reft.js
-
22-10-2019 - |
Вопрос
Я только начал работать с require.js, и я немного неясен в соответствующих случаях, в которых он должен использоваться, а также правильный способ его использования в этих случаях.
Вот как у меня в настоящее время есть вещи, настроенные с require.js. У меня две функции, functionA()
а также functionB()
. Анкет Обе эти функции требуют дополнительной функции, functionC()
работать правильно.
Я хочу загрузить functionc () только при необходимости, т.е. когда будет вызван функции function () или functionb (). Итак, у меня есть следующие файлы:
functionC.JS
functionC(){
//do stuff
}
function.js
functionA(){
define(['functionC'],function(){
//functionC() is loaded because it is listed as a dependency, so we can proceed
//do some functionA() stuff
});
}
functionb.js
functionB(){
define(['functionC'],function(){
//functionC() is loaded because it is listed as a dependency, so we can proceed
//do some functionB() stuff
});
}
Итак, это настройка правильно? И если я в конечном итоге вызовут как функции (), так и functionb () на одной странице, выполняется ли дополнительная работа, поскольку они оба загружают файл functionC.JS? Если так, это проблема? И если да, то есть ли способ настроить его, чтобы они впервые проверили, был ли функционировать. Наконец, это соответствующее использование require.js?
Решение
define()
следует использовать только для определения модуля. Для приведенного выше примера, когда часть кода должна быть динамически загружена, используя require()
более подходит:
function.js
functionA(){
require(['functionC'],function(functionC){
//use funcC in here to call functionC
});
}
Некоторые примечания:
require([])
асинхронно, поэтому, если вызывающий абонентfunctionA
ожидает возвращаемого значения от этой функции, вероятно, будут ошибки. Лучше всего, еслиfunctionA
принимает обратный вызов, который называется, когдаfunctionA
делается со своей работой.- Приведенный выше код позвонет
require()
за каждый звонокfunctionA
; Однако после первого вызова, для загрузки не потребуется штрафfunctionC.js
, он загружен только один раз. Первый разrequire()
Получится, он загрузитсяfunctionC.js
, но в остальное время требования знают, что он уже загружен, поэтому он позвонитfunction(functionC){}
функция без запросаfunctionC.js
опять таки.
Другие советы
Вы можете найти подробную информацию о requirejs и javascript modularity здесь: Javascript modularity с requirejs (от кода спагетти до кода равиоли)