react系列之组件(三)

1.什么是组件
React是专注于View层的,组件也是React核心理念之一,一个完整的应用将由一个个独立的组件拼装而成。React组件可以看成构造出一个虚拟DOM结构的对象。
2.React创建组件的方式
在React中创建组件有三种方式:
有状态组件(ES6写法):React.Component
有状态组件(ES5写法):React.createClass(注:此方法旧版本react可用,现已不可用)
无状态组件的函数写法(函数组件)。
3.有状态?无状态?
无状态组件,它是一种只负责展示的纯组件。这种组件只负责根据传入的props来展示,不涉及到要state状态、生命周期等操作。
有状态组件,需要涉及state、生命周期等操作。
React鼓励在大型项目中尽可能以无状态组件的写法 来分割原本庞大的组件。
2.React创建组件的方式
在React中创建组件有三种方式:
有状态组件(ES6写法):React.Component
有状态组件(ES5写法):React.createClass(注:此方法旧版本react可用,现已不可用)
无状态组件的函数写法(函数组件)。
3.有状态?无状态?
无状态组件,它是一种只负责展示的纯组件。这种组件只负责根据传入的props来展示,不涉及到要state状态、生命周期等操作。
有状态组件,需要涉及state、生命周期等操作。
React鼓励在大型项目中尽可能以无状态组件的写法 来分割原本庞大的组件。
组件的构想
(一)构想1:函数组件
把一堆标签用函数包起来,然后 return 出去,这个函数名就代表了这一堆标签。
定义一个函数

function App() {
  return <div className="App">hi</div>;
}
ReactDOM.render(<App />, document.getElementById("root"));

注意:<App /> 等价于 <App></App> 等价于 React.createElement(App)。表示的就是函数App里返回的内容。
那么,给函数传参该怎么做?
(二)构想2

标签就是函数,函数就是对象,标签的属性就是函数的参数。
传参示例
// 使用{props.name}获取传过来的参数
function Box1(props) {
  return <div>{props.name}</div>;
}
function App() {
  return (
    <div className="App">
      <Box1 name="jack" />
    </div>
  );
}

const rootElement = document.getElementById("root");
ReactDOM.render(<App />, rootElement);

但在 React 世界里,函数无法做到修改别人传的参数。
希望既能满足函数的功能,又能局部 render。
于是 class 组件诞生了。
(三)构想三:class 组件
最简单的例子:

class App extends React.Component {
  render() {
    return (
      <div>
        app {this.props.name} {this.props.age}
      </div>
    );
  }
}

const rootElement = document.getElementById("root");
ReactDOM.render(<App name="jack" age={18} />, rootElement);

组件如何拥有自己的局部变量?
规定:在 class App 里使用 constructor

constructor(props) {
    super();
    //局部变量初始化
    this.state = {
      name: props.name
    };
  }
如何修改参数 / 局部变量?
依然是在 class App 里
class App extends React.Component {
  constructor(props) {
    super();
    //局部变量初始化
    this.state = {
      number: 0,
      name: props.name,
      age: props.age
    };
  }
//对参数或局部变量的修改只能用 setState
  setName() {
    this.setState({
      name: "rose"
    });
  }
  render() {
    return (
      <div>
        app {this.state.name} {this.state.age}
        <button onClick={this.setName.bind(this)}>点我修改名字</button>
      </div>
    );
  }
}
const rootElement = document.getElementById("root");
ReactDOM.render(<App name="jack" age={18} />, rootElement);

新手注意事项:
onClick 后的函数名不能加上 ()
加上()的话,就是将函数的返回值结果传给onClick ,但onClick 要的是函数。
组件名首字母必须大写
关于 this
React 调用onClick 时,是:onClick.call(undefined, 其他函数)
即 React 强制把 this 变为 undefined
该怎么办?
① bind
onClick={this.setName.bind(this)}
② 箭头函数 () => { }
onClick={()=> this.setName()}
对参数或局部变量的修改只能用 setState
不能直接修改,如 this.state.number += 1 (不能这样用)
如果感觉有帮助留下一个宝贵的赞或者给小编一个赞赏!!
同时如果想了解更多内容可以关注下方公众号:


qrcode_for_gh_4effe528d112_258.jpg
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容