Comments 5
Спасибо большое за статью. Но все же не приходит ко мне понимание того, когда лучше использовать «передачу свойств вниз по дереву», Провайдеры или render props…
Из личного опыта:
1. Передачу свойств (лифтинг) использую для дечерних компонентов, когда есть родительский компонент в который приходят реальные данные от instance.
Тут же полезна деструктуризация обьекта и функциональное описание (примеры в статье), так как компонеты не использующие методов жизненного цикламожно нужно писать именно как функции (быстрее рендерятся, читабельней, меньше кода).
2. С провайдером очень просто. Наиболее частое использование — для страниц роутера. когда в центральный роутер рендерятся компоненты относительно текущего location
или же просто, если компонент враппер принимает слишком много параметров, которые в последствии пропихиваются вглуб дочерних, проще разделить.
3. render props — хороший прием, скажем, если в гриде нужно разные кастомизированые типы елементов (<Avatar/>, возможно <Avatar/> + name + surName… etc) и не хочется замусоривать базовый компонент <Grid/> набором непонятно каких стилей или пропсов… тогда проще создать функцию которая принимает весь row или же целевой value
а функция колбек может быть описана очень либерально
1. Передачу свойств (лифтинг) использую для дечерних компонентов, когда есть родительский компонент в который приходят реальные данные от instance.
<Grid>{rows.map(row => <Row title={row.title}/>)}</Grid>
.Тут же полезна деструктуризация обьекта и функциональное описание (примеры в статье), так как компонеты не использующие методов жизненного цикла
2. С провайдером очень просто. Наиболее частое использование — для страниц роутера. когда в центральный роутер рендерятся компоненты относительно текущего location
class SampleComp extends Component {
render() {
return <div>...</div>;
}
};
const mapStateToProps = state => {
return {
prop: state.prop
}
}
const mapDispatchToProps = dispatch => ({});
export default withRouter(connect(mapStateToProps, mapDispatchToProps)(SampleComp));
или же просто, если компонент враппер принимает слишком много параметров, которые в последствии пропихиваются вглуб дочерних, проще разделить.
3. render props — хороший прием, скажем, если в гриде нужно разные кастомизированые типы елементов (<Avatar/>, возможно <Avatar/> + name + surName… etc) и не хочется замусоривать базовый компонент <Grid/> набором непонятно каких стилей или пропсов… тогда проще создать функцию которая принимает весь row или же целевой value
return <div>{ formatter ? formatter(row, row[keyName]) : row[keyName] || '—' }</div>
а функция колбек может быть описана очень либерально
formatter: (row, value) => <Avatar firstName={value} url={row.authorAvatarUrl}/>
Глаза кровоточат от смеси js и html. Туда бы ещё инлайнового css добавить
Sign up to leave a comment.
Шаблоны проектирования в React