2015-10-18 1 views
0

Я иду через официальный Реагировать Учебник по https://facebook.github.io/react/docs/tutorial.htmlЯвляется ли функция ReactJS рендеринга, вводящая элементы DOM в полном объеме или частичные дополнения?

var CommentBox = React.createClass({ 
 
    loadCommentsFromServer: function() { 
 
    $.ajax({ 
 
     url: this.props.url, 
 
     dataType: 'json', 
 
     cache: false, 
 
     success: function(data) { 
 
     this.setState({ 
 
      data: data 
 
     }); 
 
     }.bind(this), 
 
     error: function(xhr, status, err) { 
 
     console.error(this.props.url, status, err.toString()); 
 
     }.bind(this) 
 
    }) 
 
    }, 
 
    handleCommentSubmit: function(comment) { 
 
    $.ajax({ 
 
     url: this.props.url, 
 
     dataType: 'json', 
 
     type: 'POST', 
 
     data: comment, 
 
     success: function(data) { 
 
     this.setState({ 
 
      data: data 
 
     }); 
 
     }.bind(this), 
 
     error: function(xhr, status, err) { 
 
     console.error(this.props.url, status, err.toString()); 
 
     // body... 
 
     } 
 
    }); 
 
    }, 
 
    getInitialState: function() { 
 
    return { 
 
     data: [] 
 
    }; 
 
    }, 
 
    componentDidMount: function() { 
 
    this.loadCommentsFromServer(); 
 
    setInterval(this.loadCommentsFromServer, this.props.pollInterval); 
 
    }, 
 
    render: function() { 
 
    return (< div className = "commentBox" > 
 
     <h1> Comments < /h1> 
 
       <CommentList data={this.state.data}/> 
 
     < CommentForm onCommentSubmit = { 
 
     this.handleCommentSubmit 
 
     } 
 
     /> 
 
      </div > 
 
    ); 
 
    } 
 
})

Это только одна, но большая часть комментария рендеринга. В функции рендеринга ReactJS уничтожает предыдущих элементов DOM и создает новое дерево элементов DOM на основе полученных данных XHR или сравнивается со старым деревом и только добавляет diff s? Если он создает совершенно новые элементы, как он делает это так быстро, как я понимаю из рассказа уроков, которые React делает это исключительно быстрее, чем другие фреймворки?

+0

[Стоит прочитать.] (Https://facebook.github.io/react/docs/reconciliation.html) – moonwave99

+0

@ moonwave99 благодарит за ссылку. только 2 дня с тех пор, как я начал реагировать, и еще не дошел до документов. Но, хорошо, проясняет механизм концептуально. – dangdis

ответ

0

делает ReactJS уничтожить предыдущие элементы DOM, а также создать новый DOM элемент дерева на основе данных XHR получил, или же его можно сравнить с старого дерева, и только добавить и переформатирование?

React отличается/сравнивает новое дерево DOM с предыдущим (старым) и отображает различия.

Вы найдете объяснение в официальном документе API here.

«Примечание: ReactDOM.render() контролирует содержимое узла контейнера вы передаете в любых существующих DOM элементы внутри заменяются при первом вызове Позже вызовы используют алгоритм DOM сравнивает РЕАКТ для эффективного обновления ReactDOM.... render() не изменяет узел контейнера (только модифицирует дочерние элементы контейнера). В будущем может быть возможно вставить компонент в существующий узел DOM без перезаписи существующих дочерних элементов. "

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