当前位置: 首页 > news >正文

next.js学习——react入门

Next.js 是一个用于构建全栈 Web 应用程序的 React 框架所以需要简单入门下react

初识

使用react的时候需要先引用两个脚本

<script src="https://unpkg.com/react@18/umd/react.development.js"></script>   <script src="https://unpkg.com/react-dom@18/umd/react-dom.development.js"></script>

还需要引用babel,将jsx代码转换成常规js代码,使得浏览器可以识别

<script src="https://unpkg.com/@babel/standalone/babel.min.js"></script>

此外,您还需要通过将脚本类型更改为来告知 Babel 要转换的代码type=text/jsx

例如

<html><body><div id="app"></div><script src="https://unpkg.com/react@18/umd/react.development.js"></script><script src="https://unpkg.com/react-dom@18/umd/react-dom.development.js"></script><script src="https://unpkg.com/@babel/standalone/babel.min.js"></script>// 注意添加type<script type="text/jsx">const app = document.getElementById('app')const root = ReactDOM.createRoot(app)root.render(<h1>hello</h1>)</script></body>
</html>

react的三个核心概念:component、props、state

组件

React 组件的名称应该大写并且React 组件的使用方式与使用常规 HTML 标签的方式相同,使用尖括号<>来引用

例如

<html><body><div id="app"></div><script src="https://unpkg.com/react@18/umd/react.development.js"></script><script src="https://unpkg.com/react-dom@18/umd/react-dom.development.js"></script><script src="https://unpkg.com/@babel/standalone/babel.min.js"></script><script type="text/jsx">const app = document.getElementById('app')// 定义组件,注意大写function Header(){return <h1>hello gy</h1>;}const root = ReactDOM.createRoot(app)// 引用组件,注意<>root.render(<Header/>)</script></body>
</html>

另外react组件也可以相互嵌套

例如

<html><body><script src="https://unpkg.com/react@18/umd/react.development.js"></script><script src="https://unpkg.com/react-dom@18/umd/react-dom.development.js"></script><script src="https://unpkg.com/@babel/standalone/babel.min.js"></script><div id="app"></div><script type="text/jsx">const app = document.getElementById('app')function Header(){return <h1>Hi gy</h1>}function HomePage(){// 在这里嵌套return (<div><Header /></div>);}const root = ReactDOM.createRoot(app)root.render(<HomePage/>)</script></body>
</html>

属性

添加props例如

<html><body><script src="https://unpkg.com/react@18/umd/react.development.js"></script><script src="https://unpkg.com/react-dom@18/umd/react-dom.development.js"></script><script src="https://unpkg.com/@babel/standalone/babel.min.js"></script><div id="app"></div><script type="text/jsx">// 取出title属性值function Header({title}){console.log(title)return <h1>{title}</h1>}function HomePage(){return (<div>// 定义title属性<Header title="React" /><Header /></div>)}const root = ReactDOM.createRoot(app)root.render(<HomePage />)</script></body>
</html>

其他方式

点号表示的对象属性,这里参数props可以换成别的

<html><body><script src="https://unpkg.com/react@18/umd/react.development.js"></script><script src="https://unpkg.com/react-dom@18/umd/react-dom.development.js"></script><script src="https://unpkg.com/@babel/standalone/babel.min.js"></script><div id="app"></div><script type="text/jsx">// 使用对象function Header(props){return <h1>{props.title}</h1>}function HomePage(){return (<div><Header title="React" /><Header title="A new title"/></div>)}const root = ReactDOM.createRoot(app)root.render(<HomePage />)</script></body>
</html>

使用模板字面量

<html><body><script src="https://unpkg.com/react@18/umd/react.development.js"></script><script src="https://unpkg.com/react-dom@18/umd/react-dom.development.js"></script><script src="https://unpkg.com/@babel/standalone/babel.min.js"></script><div id="app"></div><script type="text/jsx">function Header({title}){// 注意大括号return <h1>{`aaa ${title}`}</h1>}function HomePage(){return (<div><Header title="React" /><Header title="A new title"/></div>)}const root = ReactDOM.createRoot(app)root.render(<HomePage />)</script></body>
</html>

或者使用方法,例如

<html><body><script src="https://unpkg.com/react@18/umd/react.development.js"></script><script src="https://unpkg.com/react-dom@18/umd/react-dom.development.js"></script><script src="https://unpkg.com/@babel/standalone/babel.min.js"></script><div id="app"></div><script type="text/jsx">function Header({title}){return <h1>{createTitle(title)}</h1>}function createTitle(title){// 这里也可以直接使用三元运算符return title ? title : "none"if(title){return title;}else{return 'none';}}function HomePage(){return (<div><Header  /><Header title="A new title"/></div>)}const root = ReactDOM.createRoot(app)root.render(<HomePage />)</script></body>
</html>

list循环

<html><script src="https://unpkg.com/react@18/umd/react.development.js"></script><script src="https://unpkg.com/react-dom@18/umd/react-dom.development.js"></script><script src="https://unpkg.com/@babel/standalone/babel.min.js"></script><body><div id="app"></div><script type="text/jsx">const app = document.getElementById('app')function HomePage(){const names = ['Green','Blue',"John"]return (<div><Header title='hello gy'/><ul>// 注意这里的key不能缺少{names.map((name) => (<li key={name}>{name}</li>))}</ul></div>)}function Header({title}){return <div>{title}</div>}const root = ReactDOM.createRoot(app)root.render(<HomePage/>)</script></body>
</html>

状态

通过状态与事件处理程序进行交互

组件是大驼峰命名,事件采用小驼峰命名

例如

<html><script src="https://unpkg.com/react@18/umd/react.development.js"></script><script src="https://unpkg.com/react-dom@18/umd/react-dom.development.js"></script><script src="https://unpkg.com/@babel/standalone/babel.min.js"></script><body><div id="app"></div><script type="text/jsx">const app = document.getElementById('app')function HomePage(){return (<div><button onClick={handleClick}>Like</button></div>)}function handleClick(){console.log('click')}const root = ReactDOM.createRoot(app)root.render(<HomePage/>)</script></body>
</html>

hook钩子

useState使用方式

const [index, setIndex] = useState(0);

例如

<html><script src="https://unpkg.com/react@18/umd/react.development.js"></script><script src="https://unpkg.com/react-dom@18/umd/react-dom.development.js"></script><script src="https://unpkg.com/@babel/standalone/babel.min.js"></script><body><div id="app"></div><script type="text/jsx">const app = document.getElementById('app')function HomePage(){const [likes,setLikes] = React.useState(0)// 注意方法写在HomePage里面,放外面的话就找不到setLikes函数function handleClick(){setLikes(likes + 1)}return (<button onClick={handleClick}>Likes ({likes})</button>)}const root = ReactDOM.createRoot(app)root.render(<HomePage/>)</script></body>
</html>

其他

react中事件交互(文档地址https://react.dev/learn/adding-interactivity

react中随时间变化的数据称为状态state

创建自己的组件并进行响应,例如

<html><script src="https://unpkg.com/react@18/umd/react.development.js"></script><script src="https://unpkg.com/react-dom@18/umd/react-dom.development.js"></script><script src="https://unpkg.com/@babel/standalone/babel.min.js"></script><body><div id="app"></div><script type="text/jsx">const app = document.getElementById('app')function App(){return (<ToolBaronPlayMovie = {() => alert('palying')}onUploadImage = {()=>alert('uploading')}/>);}function ToolBar({onPlayMovie,onUploadImage}){return (<div><Button onClick={onPlayMovie}>Play Movie</Button><Button onClick={onUploadImage}>Upload Image</Button></div>);}function Button({onClick,children}){return (<button onClick={onClick}>{children}</button>);}const root = ReactDOM.createRoot(app)root.render(<App/>)</script></body>
</html>

报错存在跨域问题

Access to script at 'file:///D:/nextJs/react/App.js' from origin 'null' has been blocked by CORS policy: Cross origin requests are only supported for protocol schemes: chrome, chrome-extension, chrome-untrusted, data, http, https, isolated-app.

解决:

在vscode里安装live server插件,使用的时候,点击html右键选择open with live server

http://www.dtcms.com/a/594011.html

相关文章:

  • Java【缓存设计】定时任务+分布式锁实战:Redis vs Redisson实现状态自动扭转以及全量刷新预热机制
  • 缓存更新策略
  • 网站海外推广方案品牌策划公司的市场
  • 大潮建设集团有限公司 网站h5的制作步骤
  • 河中跳房子(信息学奥赛一本通- P1247)
  • Julia 日期和时间
  • 虚幻引擎5 GAS开发俯视角RPG游戏 P07-11 实现自动运行
  • 培训人员网站建设龙岗网站开发公司
  • 【经验分享】Genio 520/Genio720未使用引脚处理方法
  • 重庆免费网站建站模板微网站趋势
  • DDR5引领变革:内存条行业的技术迭代与市场重构
  • 一小时速通Pytorch之Tensor张量(一)
  • 怎么做网站教程 用的工具提供网站推广公司电话
  • 网站服务内容怎么写wordpress 响应时间
  • 主成分分析(Principal Component Analysis,PCA)的个人理解
  • sqlite数据库迁移至mysql
  • PostgreSQL 高并发优化:从 “连接数满到崩” 到 “支撑 10 万 QPS” 的实战技巧
  • 怎么免费建自己的网站网络营销课程培训机构
  • 团队开发者git仓库工作手册
  • 欧美风网站建设seo品牌优化整站优化
  • 2.8 模型压缩与优化技术
  • 数字孪生工厂浪潮来袭,众趣科技以实景智能筑牢智造基石
  • [設計模式]二十三種設計模式
  • 有视频接口怎么做网站哪个行业最需要做网站
  • 解锁AI工作流的终极密码:Semantic Kernel Process框架深度技术解析
  • 从0到1:Makefile自动化编译实战全解析
  • 广州网站推广教程中国建设银行网站会员用户名
  • 怎么做分享软件的网站php网站开发框架搭建
  • 网站跟网页的区别jsp做的网页是网站吗
  • 根据docker服务保存日志脚本,时间可选版本