diff --git a/app/animations/fade.js b/app/animations/fade.js
index b9657e494b786dfac62a702990da4879351979c1..97693d03ad4e7bb1779e3e34088f50c8d2bf3261 100644
--- a/app/animations/fade.js
+++ b/app/animations/fade.js
@@ -17,6 +17,7 @@ export default class Fade extends React.Component {
 		this.state = {
 			visible: props.visible
 		};
+		this._visibility = new Animated.Value(this.props.visible ? 1 : 0);
 	}
 
 	componentWillReceiveProps(nextProps) {
@@ -32,10 +33,6 @@ export default class Fade extends React.Component {
 		});
 	}
 
-	UNSAFE_componentWillMount() {
-		this._visibility = new Animated.Value(this.props.visible ? 1 : 0);
-	}
-
 	render() {
 		const { style, children, ...rest } = this.props;
 
diff --git a/app/containers/EmojiPicker/EmojiCategory.js b/app/containers/EmojiPicker/EmojiCategory.js
index 5643e0570bee8335a614fae47413ffc3ddeba33e..3e3823ba822bfc458277ce26b91aec2856426939 100644
--- a/app/containers/EmojiPicker/EmojiCategory.js
+++ b/app/containers/EmojiPicker/EmojiCategory.js
@@ -36,17 +36,13 @@ export default class EmojiCategory extends React.Component {
 		const { width, height } = this.props.window;
 
 		this.size = Math.min(this.props.width || width, height) / (this.props.emojisPerRow || emojisPerRow);
-		this.emojis = [];
+		this.emojis = props.emojis;
 	}
 
 	shouldComponentUpdate() {
 		return false;
 	}
 
-	UNSAFE_componentWillMount() {
-		this.emojis = this.props.emojis;
-	}
-
 	renderItem(emoji, size) {
 		return (
 			<TouchableOpacity
diff --git a/app/containers/EmojiPicker/index.js b/app/containers/EmojiPicker/index.js
index 28c1d687aa4f756c964ad714e2d4a9282b8b6f30..104b496a32617415162e688ca84cce0e243d8db7 100644
--- a/app/containers/EmojiPicker/index.js
+++ b/app/containers/EmojiPicker/index.js
@@ -42,6 +42,10 @@ export default class EmojiPicker extends Component {
 
 	componentDidMount() {
 		requestAnimationFrame(() => this.setState({ show: true }));
+		this.frequentlyUsed.addListener(this.updateFrequentlyUsed);
+		this.customEmojis.addListener(this.updateCustomEmojis);
+		this.updateFrequentlyUsed();
+		this.updateCustomEmojis();
 	}
 	componentWillUnmount() {
 		this.frequentlyUsed.removeAllListeners();
@@ -64,13 +68,6 @@ export default class EmojiPicker extends Component {
 		}
 	}
 
-	UNSAFE_componentWillMount() {
-		this.frequentlyUsed.addListener(this.updateFrequentlyUsed);
-		this.customEmojis.addListener(this.updateCustomEmojis);
-		this.updateFrequentlyUsed();
-		this.updateCustomEmojis();
-	}
-
 	_addFrequentlyUsed = (emoji) => {
 		database.write(() => {
 			database.create('frequentlyUsedEmoji', emoji, true);
diff --git a/app/containers/Sidebar.js b/app/containers/Sidebar.js
index 186a0af327b75acc310c737f7d5f83ee0cded6ec..66538af5ac8df7e4d4980e397552d0e90b8c5a59 100644
--- a/app/containers/Sidebar.js
+++ b/app/containers/Sidebar.js
@@ -52,6 +52,16 @@ export default class Sidebar extends Component {
 		gotoAddServer: PropTypes.func.isRequired
 	}
 
+	constructor(props) {
+		super(props);
+		this.state = { servers: [] };
+	}
+
+	componentDidMount() {
+		database.databases.serversDB.addListener('change', this.updateState);
+		this.setState(this.getState());
+	}
+
 	componentWillUnmount() {
 		database.databases.serversDB.removeListener('change', this.updateState);
 	}
@@ -72,11 +82,6 @@ export default class Sidebar extends Component {
 		servers: database.databases.serversDB.objects('servers')
 	})
 
-	UNSAFE_componentWillMount() {
-		database.databases.serversDB.addListener('change', this.updateState);
-		this.setState(this.getState());
-	}
-
 	updateState = () => {
 		this.setState(this.getState());
 	}
diff --git a/app/views/ListServerView.js b/app/views/ListServerView.js
index 423e967c8041c3ab44892471d8c0c7127f21e30c..7b4c2905df4fe768c8e7125c7d5bdfbb449ec92d 100644
--- a/app/views/ListServerView.js
+++ b/app/views/ListServerView.js
@@ -88,6 +88,12 @@ export default class ListServerView extends React.Component {
 		this.data.addListener(this.updateState);
 	}
 
+	componentDidMount() {
+		zeroconf.on('update', this.updateState);
+		zeroconf.scan('http', 'tcp', 'local.');
+		this.setState(this.getState());
+	}
+
 	componentDidUpdate() {
 		if (this.props.connected &&
 			this.props.server &&
@@ -140,14 +146,6 @@ export default class ListServerView extends React.Component {
 		};
 	};
 
-	UNSAFE_componentWillMount() {
-		zeroconf.on('update', this.updateState);
-
-		zeroconf.scan('http', 'tcp', 'local.');
-
-		this.setState(this.getState());
-	}
-
 	updateState = () => {
 		this.setState(this.getState());
 	}
diff --git a/app/views/LoginView.js b/app/views/LoginView.js
index 5233787946ef11dce245d7572ae9d52e228f53ff..d1647cfff367c345b8a3bc7759e0b9fdb0e6d034 100644
--- a/app/views/LoginView.js
+++ b/app/views/LoginView.js
@@ -70,6 +70,10 @@ export default class LoginView extends React.Component {
 		this.redirectRegex = new RegExp(`(?=.*(${ this.props.server }))(?=.*(credentialToken))(?=.*(credentialSecret))`, 'g');
 	}
 
+	componentDidMount() {
+		this.props.open();
+	}
+
 	componentWillReceiveProps(nextProps) {
 		if (this.props.services !== nextProps.services) {
 			LayoutAnimation.easeInEaseOut();
@@ -150,10 +154,6 @@ export default class LoginView extends React.Component {
 		return Base64.encodeURI(JSON.stringify({ loginStyle: 'popup', credentialToken, isCordova: true }));
 	}
 
-	UNSAFE_componentWillMount() {
-		this.props.open();
-	}
-
 	openOAuth = (oAuthUrl) => {
 		this.setState({ oAuthUrl, modalVisible: true });
 	}
diff --git a/app/views/RoomMembersView/index.js b/app/views/RoomMembersView/index.js
index a3d8d6f04d2bd8c943202e588cbd3ad28967d371..321864f6840c996bf0f63fd5d326abcbbcbd976d 100644
--- a/app/views/RoomMembersView/index.js
+++ b/app/views/RoomMembersView/index.js
@@ -57,7 +57,7 @@ export default class MentionedMessagesView extends React.PureComponent {
 		};
 	}
 
-	componentWillMount() {
+	componentDidMount() {
 		this.props.navigation.setParams({
 			onPressToogleStatus: this.onPressToogleStatus,
 			allUsers: this.state.allUsers