Defining Properties in React
- Properties hold information that influences the UI
 - Specifically, properties maintain data about a component that isn't expected to change over time
 - Properties are passed to a component
 - Meaning, they are managed outside of a component
 - Properties are referred to as 
props - Properties are declared as function parameters
 - 
Properties are immutable
- Since properties are defined outside of a component, a component isn't allowed to change the function parameter
 
 - 
Properties can be accessed as:
- Functional Component: 
props - Class Component: 
this.props 
 - Functional Component: 
 
Defining State in React
- State holds information that influences the UI
 - Specifically, state maintains data about a component that is expected to change over time
 - State is managed within the component
 - Meaning, they are managed within a component
 - State is referred to as 
state - State is declared in the function or class body
 - 
State is mutable
- Since state is defined within a component, a component is capable of changing the state
 
 - 
State can be accessed as:
- Functional Component: 
useStateHook - Class Component: 
this.state 
 - Functional Component: 
 
Overview of props and state
- 
Mutability
- Properties are used for passing immutable data
 - State is used for passing mutable data
 
 - 
Location
- Properties are passed to components
 - State is defined in a component
 
 - Generally, a state is used for holding data updated by event handlers
 
Describing the setState Method
- 
The state should never be modified directly
- Instead, the state should be updated using 
setState - The UI isn't rerendered unless 
setStateis used 
 - Instead, the state should be updated using 
 - 
The second argument of
setStateaccepts a callback- This is used for executing code after the state has been updated
 
 - 
The first argument of
setStateaccepts an object or callback- This first argument is used for changing the state
 - 
The callback is used when we need to:
- Update the state based on the previous state
 - Access any properties
 
 - 
The callback accepts two arguments:
- First, the previous state 
prevState - Second, the properties 
props 
 - First, the previous state 
 
 
// 1a. Bad: never modify state directly
increment() {
  this.state.count = this.state.count + 1;
}
// 1b. Good: modify the state using setState
increment() {
  this.setState = ({
    count: this.state.count + 1;
  })
}
// 2. Good: arguments
//      updater: function:
//                 object
//                 function:
//                   prevState
//                   props
//      callback: function
this.setState(updater, [,callback]);
// 3. Good: accepts two arguments
this.setState((state, props) => ({
  count: state.count + props.increment
}));Illustrating Functional Component with Properties
const Greet = props => {
  return(
    <div>
      <h1>
        Hello {props.nickName}, or {props.FirstName}
      </h1>
      {props.children}
    </div>
  )
}Illustrating Class Component with State
class Greet extends Component {
  constructor() {
    super()
    this.state = {
      messsage: 'Hello!'
    }
  }
  changeMessage() {
    this.setState({
      message: 'Thanks you for clicking';
    })
  }
  render() {
    return(
      <div>
        <h1>
          {this.state.message}
        </h1>
        <button onClick={() => this.changeMessage()}>Click me</button>
        {props.children}
      </div>
    )
  }
}Illustrating Class Component with Properties and State
class Greet extends Component {
  constructor(props) {
    super(props)
    this.state = {
      message: 'Hello ' + props.name;
    }
  }
  // Passing object
  changeMessage() {
    this.setState({
      message: 'Thanks for clicking';
    })
  }
  // Passing callback function
  // changeMessage() {
  //   this.setState((prevState, props) => ({
  //     message: 'Thanks for clicking' + props.name;
  //   }))
  // }
  render() {
    return(
      <div>
        <h1>
          {this.state.message}
        </h1>
        <button onClick={() => this.changeMessage()}>Click me</button>
        {props.children}
      </div>
    )
  }
}References
Previous
Next