Props - свойства компонентов
Props от англ. properties - аналоги параметров в обычных функциях JavaScript.
Например
const MyComponent = props => (
<div> Привет, {props.name} </div>
);
const el = < MyComponent name ="Mark" />
ReactDOM.render(el, document.querySelector('#root'));
В таких компонентах очень удобно использовать деструктуризацию
const MyComponent = ({name}) => (
<div> Привет, {name} </div>
);
const el = < MyComponent name ="Mark" />
ReactDOM.render(el, document.querySelector('#root'));
Чтобы не таскать везде объект props, можно сразу в аргументах разбить его на переменные.
Ещё один пример.
У нас есть TodoList
import React from 'react';
import ReactDOM from 'react-dom';
import TodoListItem from './TodoListItem';
const TodoList = () => {
return (
<ul>
<li><TodoListItem/></li>
<li><TodoListItem/></li>
</ul>
);
};
export default TodoList;
И есть отдельный Item
import React from 'react';
import ReactDOM from 'react-dom';
const TodoListItem = () => {
return (
<span>Drink Coffee</span>
);
};
export default TodoListItem;
Сейчас все Item содержат пункт Drink Coffee. Как присвоить каждому пункту уникальное значение?
Добавим в TodoList свойство label, которое будет содержать текст, который должен отображать данный пункт списка дел
import React from 'react';
import ReactDOM from 'react-dom';
import TodoListItem from './TodoListItem';
const TodoList = () => {
return (
<ul>
<li><TodoListItem label='Learn JS'/></li>
<li><TodoListItem label='Create awesome app'/></li>
</ul>
);
};
export default TodoList;
Теперь переходим в Item
import React from 'react';
import ReactDOM from 'react-dom';
const TodoListItem = (props) => {
return (
<span>Drink Coffee</span>
);
};
export default TodoListItem;
Параметр props содержит все свойства. Соответственно, props.label это значение списка дел
Вместо Drink Coffee напишем {props.label}
import React from 'react';
import ReactDOM from 'react-dom';
const TodoListItem = (props) => {
return (
<span>{props.label}</span>
);
};
export default TodoListItem;
Теперь внутри каждого пункта списка дел отображаются уникальные значения, которые мы указали в свойстве label
Если использовать деструктуризацию, код можно сократить
import React from 'react';
import ReactDOM from 'react-dom';
const TodoListItem = ({label}) => {
return (
<span>{label}</span>
);
};
export default TodoListItem;
Так тоже будет работать.
Свойство может быть несколько
Добавим в TodoList свойство important. Если значение свойству не задано, оно равно true.
import React from 'react';
import ReactDOM from 'react-dom';
import TodoListItem from './TodoListItem';
const TodoList = () => (
<ul>
<li><TodoListItem label='Learn JS' important/></li>
<li><TodoListItem label='Create awesome app'/></li>
</ul>
);
export default TodoList;
import React from 'react';
import ReactDOM from 'react-dom';
В TodoListItem добавим стиль - цвет шрифта для элемента, у которого important равно true
const TodoListItem = ({label, important = false}) => {
const styleItem = {
color: important ? 'tomato' : 'black'
};
return (
<span style={styleItem}>{label}</span>
);
};
export default TodoListItem;