diff --git a/index.js b/index.js index 857a506..d25e416 100644 --- a/index.js +++ b/index.js @@ -1,6 +1,7 @@ 'use strict'; var React = require('react'), + PropTypes = require('prop-types'), withSideEffect = require('react-side-effect'); function reducePropsToState(propsList) { @@ -17,21 +18,21 @@ function handleStateChangeOnClient(title) { } } -var DocumentTitle = React.createClass({ - displayName: 'DocumentTitle', +function DocumentTitle() {} +DocumentTitle.prototype = Object.create(React.Component.prototype); - propTypes: { - title: React.PropTypes.string.isRequired - }, +DocumentTitle.displayName = 'DocumentTitle'; +DocumentTitle.propTypes = { + title: PropTypes.string.isRequired +}; - render: function render() { - if (this.props.children) { - return React.Children.only(this.props.children); - } else { - return null; - } +DocumentTitle.prototype.render = function() { + if (this.props.children) { + return React.Children.only(this.props.children); + } else { + return null; } -}); +}; module.exports = withSideEffect( reducePropsToState, diff --git a/package.json b/package.json index 7926dac..f10c19c 100644 --- a/package.json +++ b/package.json @@ -27,6 +27,7 @@ }, "homepage": "https://github.com/gaearon/react-document-title", "devDependencies": { + "create-react-class": "^15.5.2", "expect.js": "^0.3.1", "global": "^4.3.0", "jshint": "^2.5.6", @@ -34,6 +35,7 @@ "react": "^0.13.0" }, "dependencies": { + "prop-types": "^15.5.6", "react-side-effect": "^1.0.2" } } diff --git a/test/browser.js b/test/browser.js index 5c4aa7e..2f0a9c1 100644 --- a/test/browser.js +++ b/test/browser.js @@ -3,6 +3,7 @@ 'use strict'; var expect = require('expect.js'), React = require('react'), + createReactClass = require('create-react-class'), DocumentTitle = require('../'); describe('DocumentTitle (in a browser)', function () { @@ -27,7 +28,7 @@ describe('DocumentTitle (in a browser)', function () { }); it('changes the document title on mount', function (done) { var title = 'hello world'; - var Component = React.createClass({ + var Component = createReactClass({ componentDidMount: function () { expect(global.document.title).to.equal(title); done(); @@ -41,7 +42,7 @@ describe('DocumentTitle (in a browser)', function () { it('supports nesting', function (done) { var called = false; var title = 'hello world'; - var Component1 = React.createClass({ + var Component1 = createReactClass({ componentDidMount: function () { setTimeout(function () { expect(called).to.be(true); @@ -53,7 +54,7 @@ describe('DocumentTitle (in a browser)', function () { return React.createElement(DocumentTitle, {title: title}); } }); - var Component2 = React.createClass({ + var Component2 = createReactClass({ componentDidMount: function () { called = true; }, diff --git a/test/common.js b/test/common.js index e3ec319..c4aa3cc 100644 --- a/test/common.js +++ b/test/common.js @@ -3,6 +3,7 @@ 'use strict'; var expect = require('expect.js'), React = require('react'), + createReactClass = require('create-react-class'), DocumentTitle = require('../'); describe('DocumentTitle', function () { @@ -17,7 +18,7 @@ describe('DocumentTitle', function () { expect(el.type.displayName).to.equal('SideEffect(DocumentTitle)'); }); it('hides itself from the DOM', function () { - var Component = React.createClass({ + var Component = createReactClass({ render: function () { return React.createElement(DocumentTitle, {title: 'irrelevant'}, React.createElement('div', null, 'hello') @@ -28,7 +29,7 @@ describe('DocumentTitle', function () { expect(markup).to.equal('
hello
'); }); it('throws an error if it has multiple children', function (done) { - var Component = React.createClass({ + var Component = createReactClass({ render: function () { return React.createElement(DocumentTitle, {title: 'irrelevant'}, React.createElement('div', null, 'hello'), @@ -44,7 +45,7 @@ describe('DocumentTitle', function () { }); }); it('works with complex children', function () { - var Component1 = React.createClass({ + var Component1 = createReactClass({ render: function() { return React.createElement('p', null, React.createElement('span', null, 'c'), @@ -52,7 +53,7 @@ describe('DocumentTitle', function () { ); } }); - var Component2 = React.createClass({ + var Component2 = createReactClass({ render: function () { return React.createElement(DocumentTitle, {title: 'irrelevant'}, React.createElement('div', null,