let user = {name: '@tercel_s'}; const App = () => <div> <SectionTitle /> <NameInputForm val={user.name} /> <MessageField name={user.name} /> </div>; // ---------------------------------------- // セクションのタイトル const SectionTitle = () => <h3>コンポーネント分割の練習</h3>; // ---------------------------------------- // テキストエリア const NameInputForm = props => <form className="form-inline"> <div className="form-group"> <label>お名前:</label> <input name="name" className="form-control" value={props.val} placeholder="名前を入力してください" onChange={e => changed(e.target.value)} /> </div> </form>; // ---------------------------------------- // メッセージ領域 var MessageField = props => <div className={isBlank() ? 'alert alert-warning' : 'alert alert-info'}> {isBlank() ? <span>名前が入力されていません</span> : <span>ようこそ {props.name} さん</span>} </div>; // イベント const changed = newValue => { user.name = newValue || ''; render(); } const isBlank = () => !user.name; const render = () => ReactDOM.render(<App />,document.getElementById('app')); render();
<script src="https://facebook.github.io/react/js/jsfiddle-integration-babel.js"></script> <div class="container"> <div id="app"> </div> </div>