diff --git a/components/AddTodoInput.js b/components/AddTodoInput.js
new file mode 100644
index 0000000..83357a0
--- /dev/null
+++ b/components/AddTodoInput.js
@@ -0,0 +1,32 @@
+class AddTodoInput extends React.Component {
+    constructor(props) {
+        super(props);
+        this.state = {
+            text: ''
+        };
+    }
+
+    handleInput(e) {
+        this.setState({ text: e.target.value });
+    }
+
+    handleSubmit(e) {
+        e.preventDefault();
+        addTodo(this.state.text);
+        this.setState({ text: '' });
+    }
+
+    render() {
+        return (
+            <form className="form-inline d-inline" id="addForm" onSubmit={this.handleSubmit.bind(this)}>
+                <input id="todoInput" type="text"
+                       value={this.state.text}
+                       onChange={this.handleInput.bind(this)}
+                       className="form-control"/>
+                <button id="addTodo" type="submit" className="btn btn-primary mx-1">Add</button>
+            </form>
+        );
+    }
+}
+
+ReactDOM.render(<AddTodoInput/>, document.querySelector('[data-react-component="AddTodoInput"]'));
diff --git a/components/RemoveCompletedButton.js b/components/RemoveCompletedButton.js
new file mode 100644
index 0000000..136f305
--- /dev/null
+++ b/components/RemoveCompletedButton.js
@@ -0,0 +1,25 @@
+class RemoveCompletedButton extends React.Component {
+    handleClick() {
+        removeCheckedItems();
+    }
+
+    render() {
+        if(this.props.show) {
+            return (
+                <button onClick={this.handleClick} className="btn btn-outline-secondary mx-1">
+                    Remove Completed
+                </button>
+            );
+        }
+        return null;
+    }
+}
+
+RemoveCompletedButton.defaultProps = {
+    show: false
+};
+
+ReactDOM.render(
+    <RemoveCompletedButton />,
+    document.querySelector('[data-react-component="RemoveCompletedButton"]')
+);
diff --git a/index.html b/index.html
index c94c32c..920c01d 100644
--- a/index.html
+++ b/index.html
@@ -11,15 +11,15 @@
     <h1>To Do List</h1>
     <ul id="todos" class="list-group my-2">
     </ul>
-    <form class="form-inline d-inline" id="addForm">
-        <input id="todoInput" class="form-control" type="text"/>
-        <button id="addTodo" type="submit" class="btn btn-primary mx-1">Add</button>
-    </form>
-    <button id="clearCompleted" class="btn btn-outline-secondary mx-1" style="display: none">
-        Remove Completed
-    </button>
+    <span data-react-component="AddTodoInput"></span>
+    <span data-react-component="RemoveCompletedButton"></span>
 </div>
 <script src="https://code.jquery.com/jquery-3.2.1.slim.min.js"></script>
+<script src="https://unpkg.com/react@16/umd/react.development.js"></script>
+<script src="https://unpkg.com/react-dom@16/umd/react-dom.development.js"></script>
+<script src="https://unpkg.com/babel-standalone@6.15.0/babel.min.js"></script>
 <script src="jquery/todo.js" type="text/javascript"></script>
+<script src="components/AddTodoInput.js" type="text/babel"></script>
+<script src="components/RemoveCompletedButton.js" type="text/babel"></script>
 </body>
 </html>
diff --git a/jquery/todo.js b/jquery/todo.js
index d5a0322..abb1fa2 100644
--- a/jquery/todo.js
+++ b/jquery/todo.js
@@ -39,30 +39,17 @@ function toggleComplete(todo) {
     }
 }
 
+function removeCheckedItems() {
+    $('#todos input:checked').closest('li').remove();
+    maybeHideDeleteAll();
+
+}
+
 function maybeHideDeleteAll() {
     var completedItems = $('#todos input:checked').length;
-    if(completedItems > 0) {
-        $('#clearCompleted').show();
-    } else {
-        $('#clearCompleted').hide();
-    }
+    ReactDOM.render(
+        React.createElement(RemoveCompletedButton, { show: completedItems > 0 }),
+        document.querySelector('[data-react-component="RemoveCompletedButton"]')
+    );
 }
 
-// Attach the DOM events once the page has loaded
-$(document).ready(function() {
-    // When the form input is submitted, add the todo item
-    $("#addForm").on('submit', function(e) {
-        e.preventDefault();
-        var input = $("input#todoInput");
-        addTodo(input.val());
-        input.val("");
-    });
-
-    // When the form input is submitted, add the todo item
-    $("#clearCompleted").on('click', function(e) {
-        e.preventDefault(e);
-        $('#todos input:checked').closest('li').remove();
-        $(this).hide();
-    });
-});
-