2017-02-11 3 views
4

Это своего рода вопрос от curiossity.Как работает Vue.js, React.js, Angular.js

Возникает вопрос:

Как это на стороне клиента рамки работы, позвольте мне объяснить.

Я работаю с javascript более 5 лет. И я ничего не понимаю. Как они знают, когда изменяется переменная (например, title)?

Я хотел бы сделать это следующим образом:

function onTitleChange(title) { //do some stuff } 
let title = "This is some title" 
let lastTitle = title; 
setInterval(() => { 
    if(lastTitle !== title) { 
     onTitleChange(title); 
     lastTitle = title 
    } 
}, 10); 

Является ли это, как все они работают? Это как Vue.js знает, когда изменяется значение переменной? Если нет, то какую магию они используют, чтобы знать, когда меняется переменная?

+1

Посмотрите на эту http://stackoverflow.com/questions/1759987/listening-for-variable-changes-in-javascript-or-jquery –

+0

https: // разработчик .mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy – gurghet

+0

@JozefCipa и @gurghet - это 'object.watch()' поддерживается в других браузерах, чем mozilla firefox?Поддерживается ли это также в NodeJS? – durisvk

ответ

0

Нет никакой магии, Угловой, например, использует zone.js, я рекомендую вам об этом read.

+1

Это действительно хорошо документированная библиотека. И он поддерживает мой любимый TypeScript :). – durisvk

-1

Немного о React - его на самом деле не слушать изменения объектов Js, из-за этого вызывать только render методов компонентов, если shouldComponentUpdate() (по умолчанию это использовать равенство ссылок состояния компонентов) возвращает true, и проверить, вернулся VirtualDOM равна реальной DOM.

Из-за этого - его намного быстрее, чем Угловой, который использует многие слушатели и проверки равенства для просмотра обновлений.

+0

@Dimitriy Kovalenko Это также означает, что 'React' имеет' setState (состояние) 'функцию, которую легко узнать, когда он уволен. Другие структуры, такие как 'Vue.js' и' Knockout.js', действительно прослушивают изменение переменной. – durisvk

2

Я хочу попробовать объяснить это в очень простых словах, шаг за шагом:

  1. сделать <h2>Hi</h2> элемент на простом HTML странице
  2. откройте консоль браузера и магазин DOM элемент в переменной: var h2 = document.getElemntsByTagName('h2')[0];
  3. сделать две другие переменные первого и второго var obj = {};var text = '';

    т его часть, которую вы ищете:

  4. вместо того, чтобы просто назначая obj.text = text мы объявляем геттер сеттер для obj.text атрибута так, что всякий раз, когда мы устанавливаем новое значение obj.text соответствующий DOM элемент тоже меняется.

    Object.defineProperty(obj, 'text', { 
        get: function() { 
         return text; 
        }, 
        set: function (newvalue) { 
         text = newvalue; 
         h2.innerHTML = text; 
        } 
    }); 
    
  5. теперь идите и измените значение obj.text: obj.text = "Hello again"

для получения дополнительной информации посетите эту page аут.

все коды доступны по адресу: JSfiddle

Смежные вопросы