---
id: props-in-getInitialSate-as-anti-pattern
title: props in getInitialState is an anti-pattern
layout: cookbook
permalink: props-in-getInitialSate-as-anti-pattern.html
prev: componentWillReceiveProps-not-triggered-after-mounting.html
next: dom-event-listeners.html
---
### Problem
You're using `this.props` in a component `getInitialSate`, like so:
```js
/** @jsx React.DOM */
var MessageBox = React.createClass({
getInitialState: function() {
return {nameWithQualifier: "Mr. " + this.props.name};
},
render: function() {
return
{this.state.nameWithQualifier}
;
}
});
React.renderComponent(, mountNode);
```
### Solution
Avoid this (see below for explanation). Compute it directly inside `render`:
```js
/** @jsx React.DOM */
var MessageBox = React.createClass({
render: function() {
return {"Mr. " + this.props.name}
;
}
});
React.renderComponent(, mountNode);
```
For more complex logic:
```js
/** @jsx React.DOM */
var MessageBox = React.createClass({
render: function() {
return {this.getNameWithQualifier(this.props.name)}
;
},
getNameWithQualifier: function(name) {
return 'Mr. ' + name;
}
});
React.renderComponent(, mountNode);
```
### Discussion
This isn't really a React-specific tip, as such anti-patterns often occur in code in general; in this case, React simply points them out more clearly.
Using props, passed down from parent, to generate state often leads to duplication of "source of truth", i.e. where the real data is. Whenever possible, compute values on-the-fly to ensure that they don't get out of sync later on and cause maintenance trouble.