组件间传值:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>test</title>
</head>
<body>
<div id="app">
</div>
<script src="../js/react.production.min.js"></script><!--react核心库-->
<script src="../js/react-dom.production.min.js"></script><!--操作DOM的react扩展库-->
<script src="../js/babel.min.js"></script><!--解析JSX语法-->
<script type="text/babel">
class Com extends React.Component {
click = ()=>{
// console.log(this.input);
// console.log(this.p.innerText);
console.log(this.refs.my.value);//父组件访问子组件用refs
};
render() {
return (
<div>
<input type="text" ref={(input)=>{this.input=input}}/>
<p ref={(p)=>{this.p=p}}>我是段落</p>
<input type="text" ref="my"/>
<button onClick={this.click}>点击</button>
</div>
);
}
}
ReactDOM.render(<Com/>,document.getElementById('app'));
</script>
</body>
</html>
列表:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>test</title>
</head>
<body>
<div id="app"></div>
<script src="../js/react.production.min.js"></script><!--react核心库-->
<script src="../js/react-dom.production.min.js"></script><!--操作DOM的react扩展库-->
<script src="../js/babel.min.js"></script><!--解析JSX语法-->
<script type="text/babel">
class Add extends React.Component {
click = ()=>{
this.props.allAdd(this.input.value);
};
render() {
const {length} = this.props;
return (
<div>
<input type="text" ref={(input)=>{this.input=input}}/>
<button onClick={this.click}>add{length}</button>
</div>
)
}
}
class List extends React.Component {
render() {
const {list} = this.props;
return (
<div>
<ul>
{
list.map((v,i)=>{
return <li key={i}>{v}</li>
})
}
</ul>
</div>
)
}
}
class App extends React.Component {
state = {
list:['吃饭','睡觉','打游戏','游泳']
};
add = (value)=>{
const {list} = this.state;//获取原先的list
list.unshift(value);//将添加的值传入list
this.setState(list);//重新设置list
};
render() {
const {list} = this.state;//获取list
return (
<div>
<Add allAdd={this.add} length={list.length}/>
<List list={list} />
</div>
)
}
}
ReactDOM.render(<App />,document.getElementById('app'));
</script>
</body>
</html>
受控组件和非受控组件:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>test</title>
</head>
<body>
<div id="app"></div>
<script src="../js/react.production.min.js"></script><!--react核心库-->
<script src="../js/react-dom.production.min.js"></script><!--操作DOM的react扩展库-->
<script src="../js/babel.min.js"></script><!--解析JSX语法-->
<script type="text/babel">
class Com extends React.Component {
state = {
age:''
};
//非受控组件 不受state控制
click = () => {
console.log(this.input.value);
};
change = (event)=>{
console.log(event.target.value);
this.setState({
age: event.target.value
})
};
render() {
const {age} = this.props;
return (
<div>
姓名:<input type="text" ref={(input)=>{this.input=input}}/>
<button onClick={this.click}>获取姓名</button>
年龄:<input type="text" value={age} onChange={this.change}/>
</div>
);
};
}
ReactDOM.render(<Com />,document.getElementById('app'));
</script>
</body>
</html>
组件生命周期:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Test</title>
</head>
<body>
<div id="app"></div>
<script src="../js/react.production.min.js"></script><!--react核心库-->
<script src="../js/react-dom.production.min.js"></script><!--操作DOM的react扩展库-->
<script src="../js/babel.min.js"></script><!--解析JSX语法-->
<script type="text/babel">
class Com extends React.Component {
state = {
msg:123
};
sing() {
return new Promise((resolve,reject)=>{
setTimeout(()=>{
resolve('唱一首歌');
},1000);
})
};
async get() {
await this.sing().then((res)=>{
console.log(res);
});
};
componentWillMount() {
//will会先执行,但不一定先执行完毕
console.log('之前');
// this.get();
}
componentDidMount() {
//进行ajax操作,获取后台数据
console.log('之后');
}
shouldComponentUpdate(nextProps, nextState) {
const {msg} = this.state;
//如果没有
if ({msg} !== nextState) {
return true;
}
console.log('更新');
return false;
}
componentWillUpdate() {
console.log('更新之前');
}
componentDidUpdate() {
console.log('更新之后');
//再次获取数据
}
click = ()=>{
this.setState({
msg: 234
})
};
render() {
console.log('render');
const {msg} = this.state;
return(
<div>
<h1>{msg}</h1>
<button onClick={this.click}>更新</button>
</div>
)
}
}
ReactDOM.render(<Com />,document.getElementById('app'));
</script>
</body>
</html>