01-基本理解和使用
1-1.函数式组件
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>01-函数式组件</title>
</head>
<body>
<div id="test"></div>
<script src="../React-js/react.development.js"></script>
<script src="../React-js/react-dom.development.js"></script>
<script src="../React-js/babel.min.js"></script>
<script type="text/babel">
function MyComponent(params) {
console.log(this);
return <h2>我是用函数定义的组件(适用于简单组件的定义)</h2>;
}
ReactDOM.render(<MyComponent />, document.getElementById("test"));
</script>
</body>
</html>
1-2.类式组件
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>01-函数式组件</title>
</head>
<body>
<div id="test"></div>
<script src="../React-js/react.development.js"></script>
<script src="../React-js/react-dom.development.js"></script>
<script src="../React-js/babel.min.js"></script>
<script type="text/babel">
class MyComponent extends React.Component {
render() {
console.log(this);
return <h1>我是类定义的组件,适用于复杂组件</h1>;
}
}
ReactDOM.render(<MyComponent />, document.getElementById("test"));
</script>
</body>
</html>
02-state
2-1.state 基础使用
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title></title>
</head>
<body>
<div id="test"></div>
<script src="../React-js/react.development.js"></script>
<script src="../React-js/react-dom.development.js"></script>
<script src="../React-js/babel.min.js"></script>
<script type="text/babel">
class Weather extends React.Component {
constructor(props) {
super(props);
this.state = {
isHot: true,
wind: "微风",
};
this.changeWeather = this.changeWeather.bind(this);
}
changeWeather() {
const isHot = this.state.isHot;
this.setState({
isHot: !isHot,
});
}
render() {
const { isHot, wind } = this.state;
return (
<div>
<button onClick={this.changeWeather}>改变天气</button>
<h1>
今天的天气好: {isHot ? "热" : "冷"},{wind}
</h1>
</div>
);
}
}
ReactDOM.render(<Weather />, document.getElementById("test"));
</script>
</body>
</html>
2-2.state 简写
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title></title>
</head>
<body>
<div id="test"></div>
<script src="../React-js/react.development.js"></script>
<script src="../React-js/react-dom.development.js"></script>
<script src="../React-js/babel.min.js"></script>
<script type="text/babel">
class Weather extends React.Component {
state = { isHot: true, wind: "微风" };
changeWeather = () => {
console.log(this);
const isHot = this.state.isHot;
this.setState({ isHot: !isHot });
};
render() {
const { isHot, wind } = this.state;
return (
<div>
<h1 onClick={this.changeWeather}>
今天的天气好: {isHot ? "热" : "冷"},{wind}
</h1>
</div>
);
}
}
ReactDOM.render(<Weather />, document.getElementById("test"));
</script>
</body>
</html>
03-props
3-1.props 基本使用
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>01-函数式组件</title>
</head>
<body>
<div id="test"></div>
<script src="../React-js/react.development.js"></script>
<script src="../React-js/react-dom.development.js"></script>
<script src="../React-js/babel.min.js"></script>
<script type="text/babel">
class MyComponent extends React.Component {
render() {
return (
<ul>
<li>姓名{this.props.name}</li>
<li>年龄{this.props.age}</li>
<li>性别{this.props.sex}</li>
</ul>
);
}
}
ReactDOM.render(
<MyComponent name="tom" age="12" sex="男" />,
document.getElementById("test")
);
</script>
</body>
</html>
3-2.对 props 进行限制
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>01-函数式组件</title>
</head>
<body>
<div id="test"></div>
<div id="test1"></div>
<script src="../React-js/react.development.js"></script>
<script src="../React-js/react-dom.development.js"></script>
<script src="../React-js/babel.min.js"></script>
<script src="../React-js/prop-types.js"></script>
<script type="text/babel">
class MyComponent extends React.Component {
render() {
return (
<ul>
<li>姓名{this.props.name}</li>
<li>年龄{this.props.age}</li>
<li>性别{this.props.sex}</li>
</ul>
);
}
}
MyComponent.propTypes = {
name: PropTypes.string.isRequired,
name: PropTypes.string,
age: PropTypes.number,
speak: PropTypes.func,
};
MyComponent.defaultProps = {
sex: "不男不女",
age: 18,
};
const info = { name: "123", age: 13 };
ReactDOM.render(
<MyComponent {...info} speak={speak} />,
document.getElementById("test1")
);
function speak(params) {
console.log("我说话了");
}
</script>
</body>
</html>
3-3.props 简写
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>01-函数式组件</title>
</head>
<body>
<div id="test"></div>
<div id="test1"></div>
<script src="../React-js/react.development.js"></script>
<script src="../React-js/react-dom.development.js"></script>
<script src="../React-js/babel.min.js"></script>
<script src="../React-js/prop-types.js"></script>
<script type="text/babel">
class MyComponent extends React.Component {
static propTypes = {
name: PropTypes.string.isRequired,
name: PropTypes.string,
age: PropTypes.number,
speak: PropTypes.func,
};
static defaultProps = {
sex: "不男不女",
age: 18,
};
render() {
return (
<ul>
<li>姓名{this.props.name}</li>
<li>年龄{this.props.age}</li>
<li>性别{this.props.sex}</li>
</ul>
);
}
}
const info = { name: "123", age: 13 };
ReactDOM.render(
<MyComponent {...info} speak={speak} />,
document.getElementById("test1")
);
function speak(params) {
console.log("我说话了");
}
</script>
</body>
</html>
3-4.props 在构造函数中情况
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>01-函数式组件</title>
</head>
<body>
<div id="test"></div>
<div id="test1"></div>
<script src="../React-js/react.development.js"></script>
<script src="../React-js/react-dom.development.js"></script>
<script src="../React-js/babel.min.js"></script>
<script src="../React-js/prop-types.js"></script>
<script type="text/babel">
class MyComponent extends React.Component {
render() {
return (
<ul>
<li>姓名{this.props.name}</li>
<li>年龄{this.props.age}</li>
<li>性别{this.props.sex}</li>
</ul>
);
}
}
const info = { name: "123", age: 13 };
ReactDOM.render(
<MyComponent {...info} speak={speak} />,
document.getElementById("test1")
);
function speak(params) {
console.log("我说话了");
}
</script>
</body>
</html>
3-5.props 在函数值组件中使用
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>01-函数式组件</title>
</head>
<body>
<div id="test"></div>
<div id="test1"></div>
<script src="../React-js/react.development.js"></script>
<script src="../React-js/react-dom.development.js"></script>
<script src="../React-js/babel.min.js"></script>
<script src="../React-js/prop-types.js"></script>
<script type="text/babel">
function MyComponent(props) {
const { name, age, sex } = props;
return (
<ul>
<li>姓名{name}</li>
<li>年龄{age}</li>
<li>性别{sex}</li>
</ul>
);
}
MyComponent.propTypes = {
name: PropTypes.string.isRequired,
name: PropTypes.string,
age: PropTypes.number,
speak: PropTypes.func,
};
MyComponent.defaultProps = {
sex: "不男不女",
age: 18,
};
const info = { name: "123", age: 13 };
ReactDOM.render(
<MyComponent {...info} />,
document.getElementById("test1")
);
</script>
</body>
</html>
04-refs
4.1-字符串形式 refs 的基本使用
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>01-函数式组件</title>
</head>
<body>
<div id="test"></div>
<div id="test1"></div>
<script src="../React-js/react.development.js"></script>
<script src="../React-js/react-dom.development.js"></script>
<script src="../React-js/babel.min.js"></script>
<script type="text/babel">
class MyComponent extends React.Component {
showData = () => {
const { input1 } = this.refs;
let value1 = input1.value;
console.log(value1);
};
showData2 = () => {
const { input2 } = this.refs;
let value2 = input2.value;
console.log(value2);
};
render() {
return (
<div>
<input
ref="input1"
type="text"
placeholder="点击按钮提示数据"
></input>
<button onClick={this.showData}>点我提示左侧的数据</button>
<input
ref="input2"
onBlur={this.showData2}
type="text"
placeholder="失去焦点提示数据"
></input>
</div>
);
}
}
ReactDOM.render(<MyComponent />, document.getElementById("test1"));
</script>
</body>
</html>
4.2-回调形式 refs 的基本使用
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>01-函数式组件</title>
</head>
<body>
<div id="test"></div>
<div id="test1"></div>
<script src="../React-js/react.development.js"></script>
<script src="../React-js/react-dom.development.js"></script>
<script src="../React-js/babel.min.js"></script>
<script type="text/babel">
class MyComponent extends React.Component {
showData = () => {
const { input1 } = this;
let value1 = input1.value;
alert(value1);
};
showData2 = () => {
const { input2 } = this;
let value2 = input2.value;
alert(value2);
};
render() {
return (
<div>
<input
ref={(c) => (this.input1 = c)}
type="text"
placeholder="点击按钮提示数据"
></input>
<button onClick={this.showData}>点我提示左侧的数据</button>
<input
ref={(c) => (this.input2 = c)}
onBlur={this.showData2}
type="text"
placeholder="失去焦点提示数据"
></input>
</div>
);
}
}
ReactDOM.render(<MyComponent />, document.getElementById("test1"));
</script>
</body>
</html>
4.3-回调形式 refs 的回调执行次数
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>01-函数式组件</title>
</head>
<body>
<div id="test"></div>
<div id="test1"></div>
<script src="../React-js/react.development.js"></script>
<script src="../React-js/react-dom.development.js"></script>
<script src="../React-js/babel.min.js"></script>
<script type="text/babel">
class MyComponent extends React.Component {
state = { isHot: true };
showData = () => {
const { input1 } = this;
let value1 = input1.value;
alert(value1);
};
changeWeather = () => {
const { isHot } = this.state;
this.setState({
isHot: !isHot,
});
};
saveInput = (c) => {
this.input1 = c;
console.log(c);
};
render() {
const { isHot } = this.state;
return (
<div>
<h2>今天天气很{isHot ? "热" : "冷"}</h2>
{/*这种写法有个问题,就是更新时候,这个console.log(c)会执行两次,第一次c是null,第二才是这个dom结构*/}
{/*<input ref={c => { this.input1 = c; console.log(c); }} type="text" placeholder="点击按钮提示数据"></input>*/}
{/*这种写法是做好的,只会执行一次,但是没必要*/}
<input
ref={this.saveInput}
type="text"
placeholder="点击按钮提示数据"
></input>
<button onClick={this.showData}>点我提示左侧的数据</button>
<button onClick={this.changeWeather}>点我切换天气</button>
</div>
);
}
}
ReactDOM.render(<MyComponent />, document.getElementById("test1"));
</script>
</body>
</html>
4.4-createRef 形式 refs 的基本使用
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>01-函数式组件</title>
</head>
<body>
<div id="test"></div>
<div id="test1"></div>
<script src="../React-js/react.development.js"></script>
<script src="../React-js/react-dom.development.js"></script>
<script src="../React-js/babel.min.js"></script>
<script type="text/babel">
class MyComponent extends React.Component {
myRef1 = React.createRef();
myRef2 = React.createRef();
showData = () => {
alert(this.myRef1.current.value);
};
showData2 = () => {
alert(this.myRef2.current.value);
};
render() {
return (
<div>
<input
ref={this.myRef1}
type="text"
placeholder="点击按钮提示数据"
></input>
<button onClick={this.showData}>点我提示左侧的数据</button>
<input
ref={this.myRef2}
onBlur={this.showData2}
type="text"
placeholder="失去焦点提示数据"
></input>
</div>
);
}
}
ReactDOM.render(<MyComponent />, document.getElementById("test1"));
</script>
</body>
</html>
4.5-.事件处理
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>01-函数式组件</title>
</head>
<body>
<div id="test"></div>
<div id="test1"></div>
<script src="../React-js/react.development.js"></script>
<script src="../React-js/react-dom.development.js"></script>
<script src="../React-js/babel.min.js"></script>
<script type="text/babel">
class MyComponent extends React.Component {
myRef1 = React.createRef();
showData = () => {
alert(this.myRef1.current.value);
};
showData2 = (event) => {
alert(event.target.value);
};
render() {
return (
<div>
<input
ref={this.myRef1}
type="text"
placeholder="点击按钮提示数据"
></input>
<button onClick={this.showData}>点我提示左侧的数据</button>
<input
onBlur={this.showData2}
type="text"
placeholder="失去焦点提示数据"
></input>
</div>
);
}
}
ReactDOM.render(<MyComponent />, document.getElementById("test1"));
</script>
</body>
</html>