In React, реквизит протекает вниз, от родителя до дочернего .
Это означает, что когда мы вызываем ReactDOM.render
, React может отображать корневой узел, пропускать любые реквизиты, а затем забывать об этом узле. Это сделано. Это уже сделано.
Это происходит у каждого компонента, мы его визуализируем, а затем переходим вниз по дереву с глубиной.
Если компонент может мутировать его реквизит, мы будем менять объект, который доступен для родительского узла после того, как родительский узел уже был обработан. Это может вызвать все виды странного поведения, например, user.name
может иметь одно значение в одной части приложения и другое значение в другой части, и оно может обновиться при следующем запуске рендеринга.
// App renders a user.name and a profile
const App = (props) =>
React.createElement('div', null, [
props.user.name,
React.createElement(Profile, props}
])
// Profile changes the user.name and renders it
// Now App has the wrong DOM.
const Profile = ({user}) => {
user.name = "Voldemort" // Uh oh!
return React.createElement('div', null, user.name);
}
// Render the App and give it props
ReactDOM.render(
React.createElement(App, {user: {name: "Hermione"}}),
document.getElementById('app'))
);
Отправляем приложение. Он выводит «Гермиону» в «Теневой ДОМ». Мы представляем профиль, он выводит «Волдеморт». Приложение теперь неправильно. Он должен сказать «Волдеморт», потому что user.name - «Волдеморт», но мы уже выводим «Гермиону», и уже слишком поздно его менять.
Значение будет различным в разных частях приложения.
. Мутирующие реквизиты были бы формой двух -внешняя привязка. Мы будем изменять значения, на которые может положиться другой компонент, расположенный выше дерева.
Угловое 1 имело это, вы могли бы изменять любые данные в любое время, где бы вы ни были. Для работы ему понадобился циклический $ digest. В принципе, он будет перемещаться вокруг и вокруг, повторно рендерируя DOM, пока все данные не закончили распространение. Это было частью причины, по которой Угловой 1 был настолько медленным.
Чтобы создать такую диаграмму, я бы предположил, что автор либо раскрасил ее вручную (что не исключено, если изображение одноразовое, у консультантов много людей для таких задач), либо использовал следующий прием: изображение, которое вы показали состоит из двух диаграмм (оставляя столбики на правой стороне вне области видимости):
Хотя 1) будет иметь столбцы только для 2012, 2013, ... 2017 года, необходимо, чтобы 2) было более детализированным и содержало значения y для следующих значений x 2012 - левый, 2012 - правый, 2013 - левый, 2013 - правый и т. Д.
В конце концов, потребуется довольно тонкая настройка.
Всего наилучшего.
Jens