English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
A principal diferença entre estado e propspropsé imutável. Por isso, o componente contenedor deve definir um estado que pode ser atualizado e modificado, enquanto os componentes filhos devem usar props para passar dados do estado.
Quando precisamos usar dados imutáveis no componente, podemos adicionar props no função reactDOM.render() do main.js e usá-la no componente.
import React from 'react'; class App extends React.Component { render() { return ( <div> <h1>{this.props.headerProp}</h1> <h2>{this.props.contentProp}</h2> </div> ); } }
import React from 'react'; import ReactDOM from 'react-dom'; import App from './App.jsx'; ReactDOM.render(<App headerProp="Header from props..." contentProp="Content from props..."/>, document.getElementById('app')); export default App;
Isso resultará no seguinte.
Você também pode definir diretamente os valores padrão de propriedades no construtor do componente, em vez de adicioná-lo ao elemento reactDom.render().
import React from 'react'; class App extends React.Component { render() { return ( <div> <h1>{this.props.headerProp}</h1> <h2>{this.props.contentProp}</h2> </div> ); } } App.defaultProps = { headerProp: "Header from props...", contentProp: "Content from props..." } export default App;
import React from 'react'; import ReactDOM from 'react-dom'; import App from './App.jsx'; ReactDOM.render(<App/>, document.getElementById('app'));
A saída é a mesma que antes.
O seguinte exemplo mostra comoestadoNa aplicação, estamos realizando a fusão e suporte. No componente pai, configuramos o estado e, em seguida, usamospropsPassando para a árvore de componentes. EmrenderDentro da função, estamos configurandoheaderPropecontentPropNo componente filho.
import React from 'react'; class App extends React.Component { constructor(props) { super(props); this.state = { header: "Header from props...", content: "Content from props..." } } render() { return ( <div> <Header headerProp = {this.state.header}/> <Content contentProp = {this.state.content}/> </div> ); } } class Header extends React.Component { render() { return ( <div> <h1>{this.props.headerProp}</h1> </div> ); } } class Content extends React.Component { render() { return ( <div> <h2>{this.props.contentProp}</h2> </div> ); } } export default App;
import React from 'react'; import ReactDOM from 'react-dom'; import App from './App.jsx'; ReactDOM.render(<App/>, document.getElementById('app'));
Os resultados serão novamente os mesmos que nos dois exemplos anteriores, a única diferença é a nossa fonte de dados, que inicialmente veio deestadoQuando queremos atualizá-lo, basta atualizar o estado, todos os componentes filhos serão atualizados.