给无状态的纯UI组件应用样式

优质
小牛编辑
143浏览
2023-12-01

请保持样式远离那些离不开state的组件. 比如路由, 视图, 容器, 表单, 布局等等不应该有任何的样式或者css class出现在组件上.
相反, 这些复杂的业务组件应该有一些带有基本功能的无状态UI组件组成.

没有任何样式/classNames的Form组件, 仅有纯的组件组合而成.

  1. class SampleComponent extends Component {
  2. render() {
  3. return (
  4. <form onSubmit={this.handleSubmit}>
  5. <Heading children='Sign In'/>
  6. <Input
  7. name='username'
  8. value={username}
  9. onChange={this.handleChange}/>
  10. <Input
  11. type='password'
  12. name='password'
  13. value={password}
  14. onChange={this.handleChange}/>
  15. <Button
  16. type='submit'
  17. children='Sign In'/>
  18. </form>
  19. )
  20. }
  21. }
  22. // 表达组件(带样式)
  23. const Button = ({
  24. ...props
  25. }) => {
  26. const sx = {
  27. fontFamily: 'inherit',
  28. fontSize: 'inherit',
  29. fontWeight: 'bold',
  30. textDecoration: 'none',
  31. display: 'inline-block',
  32. margin: 0,
  33. paddingTop: 8,
  34. paddingBottom: 8,
  35. paddingLeft: 16,
  36. paddingRight: 16,
  37. border: 0,
  38. color: 'white',
  39. backgroundColor: 'blue',
  40. WebkitAppearance: 'none',
  41. MozAppearance: 'none'
  42. }
  43. return (
  44. <button {...props} style={sx}/>
  45. )
  46. }