0%

React 学习记录

前言

去年暑假学了一下vue,这个假期想学一下reacttypescript (可能要鸽)

基础

更新已渲染元素

1
2
3
4
5
6
7
8
9
10
11
12
function tick() {
const element = (
<div>
<h1>Hello,world</h1>
<h2>It is{new Date().toLocaleTimeString()}</h2>
</div>
)
ReactDOM.render(element, document.getElementById('root'));
}


setInterval(tick,100)

image.png
计时器

setInterval 每几秒执行一次
setTimeout 几秒后再执行

组件定义

1
2
3
4
5
6
7
8
9
10
11
class Welcome extends React.Component {
render() {
return <h1>Hello, {this.props.name}</h1>;
}
}

//or

function Welcome(props) {
return <h1>Hello, {props.name}</h1>;
}

组件渲染

App.js

1
2
3
4
5
6
7
8
9
10
11
12
13
14
function Welcome(props) {
return <h1>Hello, {props.name}</h1>;
}

function App() {
return (
<div>
<Welcome name="Sara" />
<Welcome name="Cahal" />
<Welcome name="Edite" />
</div>
);
}
export default App;

index.js

1
2
3
4
import App from './App'
ReactDOM.render(
<App />,
document.getElementById('root'));

效果
image.png

组件名首字母要大写

1
2
3
4
5
6
7
8
function Sum(props) {
return (<div>{props.a+props.b}</div>);
}
ReactDOM.render(
<Sum a={1}b={2}/>,
document.getElementById('root'));

//3

整型必须加 {} ,字符串可以直接加双引号

事件

1
2
3
const refresh = (src) => event => {
//
}

需要 => event=>
如果缺少会直接执行,当做执行后的结果赋值给变量

路由(react-router-dom)

基础

1
2
3
4
5
6
7
8
9
return (
<React.Fragment>
<HashRouter>
<Switch>
<Route path={"/home"} component={Home} />
</Switch>
</HashRouter>
</React.Fragment>
)

路由重定向

1
2
3
4
5
6
7
8
9
10
11
return (
<React.Fragment>
<HashRouter>
<Switch>
<Route exact path="/" render={() =>
<Redirect to='/home'></Redirect>}></Route>
<Route path={"/home"} component={Home} />
</Switch>
</HashRouter>
</React.Fragment>
)

访问根目录时会跳转到/home

路由跳转(withRouter)

参考https://github.com/brickspert/blog/issues/3

组件放在标签内使用 withRouter 来做

1
2
3
4
5
6
7
8
9
function Router(){
return (
<HashRouter>
<Switch>
<Route path="/" component={Base} />
<Route path="/login" component={Login} />
</Switch>
</HashRouter>
)}

然后设置方法

1
2
3
4
5
6
7
8
9
10
function Base(props){
const toLoginRoute = () => {
props.history.push("/login")
}
return (
<Button onclick={toLoginRoute}></Button>
)
}

export default withRouter(Base);