George Lin
Before Material-UI, you need to know...
A JAVASCRIPT LIBRARY FOR BUILDING USER INTERFACES
A simple div component:
var HelloMessage = React.createClass({
  render: function() {
    return <div>Hello {this.props.name}</div>;
  }
});
Note the render call in the component
A stateful component
var Timer = React.createClass({
  getInitialState: function() {
    return {secondsElapsed: 0};
  },
  tick: function() {
    this.setState({secondsElapsed: this.state.secondsElapsed + 1});
  },
  componentDidMount: function() {
    this.interval = setInterval(this.tick, 1000);
  },
  componentWillUnmount: function() {
    clearInterval(this.interval);
  },
  render: function() {
    return (
      <div>Seconds Elapsed: {this.state.secondsElapsed}</div>
    );
  }
});
.setState() can trigger component update
Super easy to make UI hierarchy
render: function() {
  return (
    <App>
      <FancyTitleForYourTodoList/>
      <TodoList>
        {_.map(todos, function(todo){
          return <TodoListItem item={todo}/>;
        })}
      </TodoList>
    </App>
  );
}
Before Material-UI, you need to know...
Presented by
in 2014It's an UI guideline about MOTION, STYLE, COMPONENT, LAYOUT, PATTERNS...
Buttons
Card
Date Picker
A Set of React Components that Implement Google's Material Design
// ./App.js
import React from 'react';
import ReactDOM from 'react-dom';
import getMuiTheme from 'material-ui/styles/getMuiTheme';
import MuiThemeProvider from 'material-ui/styles/MuiThemeProvider';
import MyAwesomeReactComponent from './MyAwesomeReactComponent';
const App = () => (
  <MuiThemeProvider muiTheme={getMuiTheme()}>
    <MyAwesomeReactComponent />
  </MuiThemeProvider>
);
ReactDOM.render(
  <App />,
  document.getElementById('app')
);
// ./MyAwesomeReactComponent.js import React from 'react'; import RaisedButton from 'material-ui/RaisedButton'; const MyAwesomeReactComponent = () => ( <RaisedButton label="Default" /> ); export default MyAwesomeReactComponent;
We use
import getMuiTheme from 'material-ui/styles/getMuiTheme';
, where muiTheme is based on lightBaseTheme
Customize it before using the theme:
const muiTheme = getMuiTheme({
  palette: {
    textColor: cyan500,
  },
  appBar: {
    height: 50,
  },
});
class Main extends React.Component {
  render() {
    return (
      <MuiThemeProvider muiTheme={muiTheme}>
        <AppBar title="My AppBar" />
      </MuiThemeProvider>
    );
  }
}
export default Main;
Colors for Material-UI
import {cyan500, blue700} from 'material-ui/styles/colors';
To override the theme for one component
const styles = {
  checkBox: {
    width: '50px',
    margin: '0 auto'
  },
  checkBoxIcon: {
    fill: '#FF4081'
  }
}
<Checkbox
  id="checkboxId1"
  name="checkboxName1"
  value="checkboxValue1"
  label="went for a run today"
  style={styles.checkBox}
  iconStyle={styles.checkBoxIcon}
/>
You can also mix Inline and CSS Styles (not recommended)
<Checkbox
  id="checkboxId1"
  name="checkboxName1"
  value="checkboxValue1"
  label="went for a run today"
  className="muidocs-checkbox-example"
  iconStyle={{
    fill: '#FF9800'
  }}/>
/* In our CSS file */
.muidocs-checkbox-example {
  border: 2px solid #0000FF;
  background-color: #FF9800;
}
Let's have a FlatButton
No only can Material-UI do the UI job
<!-- Accent-colored raised button with ripple --> <button class="mdl-button mdl-js-button mdl-button--raised mdl-js-ripple-effect mdl-button--accent"> Button </button>
<div class="ui three buttons"> <button class="ui active button">One</button> <button class="ui button">Two</button> <button class="ui button">Three</button> </div>
References: