Можем ли мы что-то отобразить или добавить функциональность к стилевым компонентам?
Да, стилевые компоненты могут использоваться как любой собственный компонент. Так что, как HTML <button>
может использоваться для отображения чего-либо, вы можете использовать стилизованную кнопку для этого. См. Ниже.
Точно так же вы можете добавить функциональность, как в родном компоненте, например, прослушивая события щелчка. Приведенная ниже демонстрация «добавляет» функциональность к ColorfulButton
, обрабатывая его событие щелчка.
Смотрите также, как цвет передается в качестве реквизита ColorfulButton
через mycolor="green"
:
const ColorfulButton = styled.button`
display: inline-block;
color: ${props => props.mycolor || "blue"};
font-size: 1em;
margin: 1em;
padding: 0.25em 1em;
border: 2px solid palevioletred;
border-radius: 3px;
display: block;
`;
class TodoApp extends React.Component {
constructor(props) {
super(props)
this.state = { text: "Learn JavaScript (click me)", done: true }
}
handleClick = e => {
this.setState({...this.state, done: !this.state.done});
}
render() {
return (
<div>
<ColorfulButton onClick={this.handleClick} mycolor="green">{this.state.text}</ColorfulButton>
<br />
{this.state.done ? 'Yes' : 'No'}
</div>
)
}
}
ReactDOM.render(<TodoApp />, document.querySelector("#app"))
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.6.3/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.6.3/umd/react-dom.production.min.js"></script>
<script src="https://unpkg.com/styled-components/dist/styled-components.min.js"></script>
<div id="app"></div>