精华内容
下载资源
问答
  •  其实我的react的实战经验很少,大概是17年-18年写了一个react全家桶的后台管理系统。猜测这个项目应该还一直在使用  在我手里的vue项目就比较多了,技术栈一直是vue全家桶。最近也在深入的了解vue的原理。撸一遍...

    前言

      其实我的react的实战经验很少,大概是17年-18年写了一个react全家桶的后台管理系统。猜测这个项目应该还一直在使用

      在我手里的vue项目就比较多了,技术栈一直是vue全家桶。最近也在深入的了解vue的原理。撸一遍vue源码。尤大大正在vue3.0

      听说也是大改的,函数式编程,从长远的角度来看。还是利大于弊的。react比较短板,所以想利用工作之余写几个实战项目,react非常强悍

      希望后面也可以写更多的大型的react项目,深入了解前端,自己的能力也可以提升到一个台阶。

     

    1. 第一步,如何开始react呢
      1. 有过vue开发的前端,都熟悉 vue-cli 脚手架这个东西。脚手架就是用来快速搭建单页面项目的,说白了就是一个基本项目框架
      2. 那react,也是对应的脚手架的。create-react-app 这里放出官网相对应的链接:https://zh-hans.reactjs.org/docs/create-a-new-react-app.html#create-react-app
    2. 开始动手吧
      • 在本地新建一个文件夹,然后打开命令行 运行代码 :npx create-react-app my-app
      • 注释:第一行的 npx 不是拼写错误 —— 它是 npm 5.2+ 附带的 package 运行工具
      • 运行完之后,长这样子的
      • 运行 cd my-app 
      • 运行 yarn start
      • 运行之后的结果是这样的
      • 会打开默认浏览器)其实平常我都是用谷歌浏览器的 360总是很霸道的把360浏览器设置成为我的默认浏览器 改来改去的 我改累了 就妥协了
      • 用你最喜欢的编辑器,打开 my-app 目录结构长这样子
      • 画布已经准备好了(),接下来就任君发挥了。
    3. 这仅仅是打开了门哦,快来跟Fannie一起冒险吧)哈哈哈哈

    转载于:https://www.cnblogs.com/ifannie/p/11083348.html

    展开全文
  • 怎么修改react的默认3000端口 我们在运行多个react项目时,我们想指定react的端口。 经过我查资料,我总结了两个方法。 方法一 打开项目中的node_modules文件夹->找到react-script文件夹->打开scripts...

    怎么修改react的默认3000端口

    • 我们在运行多个react项目时,我们想指定react的端口。
    • 经过我查资料,我总结了两个方法。
      • 方法一
        • 打开项目中的node_modules文件夹->找到react-script文件夹->打开scripts文件夹->找到start.js文件->然后在此文件夹中修改即可。
          目录图片
        • Ctrl+C关闭项目->然后再次启动即可
          Ctcl+c
      • 方法二
        • 打开package.json文件->像如图所示添加如下代码即可。
          如图所示
        • 也就是找到 scripts节点->在start命令处添加如下代码:
         set PORT = 3001 
        
        • Ctrl+C关闭项目->然后再次启动即可
    • 经过如上所述,优先度为:方法二>方法一
    展开全文
  • 解决react中样式冲突的方法:首先打开相应的代码文件;然后将类名前加上模块名,如将整个组件的样式表CSS类名前加上组件名LoveVideo即可。本教程操作环境:windows7系统、react17.0.1版本,该方法适用于所有品牌电脑...

    解决react中样式冲突的方法:首先打开相应的代码文件;然后将类名前加上模块名,如将整个组件的样式表CSS类名前加上组件名LoveVideo即可。

    本教程操作环境:windows7系统、react17.0.1版本,该方法适用于所有品牌电脑。

    解决react中样式冲突

    react在开发中很多有很多需要注意的地方,换句话说就是有很多小坑需要踩一踩,这里分享一下我遇到的一个小坑,就是样式冲突,这是一个值得注意的问题,首先看一下例子:

    有两个组件,一个叫做TestAComponent,另外一个叫做TestBComponent,在TestA组件中我写了一个背景色为蓝色的按钮,TestB中我写了一个背景色为红色的按钮。

    TestAComponent 组件A:class TestAComponent extends React.Component {

    render() {

    return (

    背景为蓝色

    );

    }

    }

    TestA css,背景设置的为蓝色:.box{

    font-size: 20px;

    margin: 10px;

    padding: 20px;

    background-color: blue;

    border-radius: 10px;

    }

    TestB 组件B:class TestBComponent extends React.Component {

    render() {

    return (

    背景为红色

    );

    }

    }

    TestB css,背景设置的为红色:.box{

    font-size: 20px;

    margin: 10px;

    padding: 20px;

    background-color: red;

    border-radius: 10px;

    }

    代码写好之后npm start一下,这是会发现浏览器里显示的效果是这样的:

    明明两个按钮设置了不同的背景色,为什么实际显示会这样呢?这是我们分析一下样式的设置,在标签中我们设置的class名为box,这是很多前端新人常用的命名方法,但是将不同组件的标签的class类名设置为相同的名字会造成样式冲突。

    解决此问题方法:

    将类名前加上模块名,如这个组件叫做LoveVideo,则整个组件的样式表CSS类名前加上组件名LoveVideo:

    TestA 背景为蓝色

    .LoveVideobox{

    font-size: 20px;

    margin: 10px;

    padding: 20px;

    background-color: blue;

    border-radius: 10px;

    }

    修改好之后刷新一下页面,你就会发现样式冲突的问题就会很好的解决:

    除了这样命名相同造成的冲突外,还有一种情况就是设置了一些全局的样式,比如:html{

    background-color: #fff;

    font-size: 14px;

    }

    *{

    margin: 0;

    padding: 0;

    background-color: #fff;

    font-size: 14px;

    }

    这样的全局通用的样式也切记不可设置的,因为使用react做一个单页应用只有一个页面,如果设置了全局样式则整个页面都会加载出此样式。

    总结

    1、单个组件类名加上组件名前缀,如组件名为LoveVideo,则所有的样式名前加上此前缀

    2、不要设置html{}、*{}之类的全局通用样式

    展开全文
  • 这是 React 进阶系列的第一篇文章,这个系列内容会包括一些 React 的新知识以及原理内容,有兴趣的可以持续关注。 注意:Hooks 在 React 16.8...但是通过这样的方式去实现组件,你打开 React DevTools 就会发现组件...

    这是 React 进阶系列的第一篇文章,这个系列内容会包括一些 React 的新知识以及原理内容,有兴趣的可以持续关注。

    注意:Hooks 在 React 16.8 版本中才正式发布

    为什么要用 Hooks

    组件嵌套问题

    之前如果我们需要抽离一些重复的逻辑,就会选择 HOC 或者 render props 的方式。但是通过这样的方式去实现组件,你打开 React DevTools 就会发现组件被各种其他组件包裹在里面。这种方式首先提高了 debug 的难度,并且也很难实现共享状态。

    但是通过 Hooks 的方式去抽离重复逻辑的话,一是不会增加组件的嵌套,二是可以实现状态的共享。

    class 组件的问题

    如果我们需要一个管理状态的组件,那么就必须使用 class 的方式去创建一个组件。但是一旦 class 组件变得复杂,那么四散的代码就很不容易维护。另外 class 组件通过 Babel 编译出来的代码也相比函数组件多得多。

    Hooks 能够让我们通过函数组件的方式去管理状态,并且也能将四散的业务逻辑写成一个个 Hooks 便于复用以及维护。

    Hooks 怎么用

    前面说了一些 Hooks 的好处,接下来我们就进入正题,通过实现一个计数器来学习几个常用的 Hooks。

    useState

    useState 的用法很简单,传入一个初始 state,返回一个 state 以及修改 state 的函数。

    // useState 返回的 state 是个常量
    // 每次组件重新渲染之后,当前 state 和之前的 state 都不相同
    // 即使这个 state 是个对象
    const [count, setCount] = useState(1)
    复制代码

    setCount 用法是和 setState 一样的,可以传入一个新的状态或者函数。

    setCount(2)
    setCount(prevCount => prevCount + 1)
    复制代码

    useState 的用法是不是很简单。假如现在需要我们实现一个计数器,按照之前的方式只能通过 class 的方式去写,但是现在我们可以通过函数组件 + Hooks 的方式去实现这个功能。

    function Counter() {
      const [count, setCount] = React.useState(0)
      return (
        <div>
          Count: {count}
          <button onClick={() => setCount(prevCount => prevCount + 1)}>+</button>
          <button onClick={() => setCount(prevCount => prevCount - 1)}>-</button>
        </div>
      );
    }
    复制代码

    useEffect

    现在我们的计时器需求又升级了,需要在组件更新以后打印出当前的计数,这时候我们可以通过 useEffect 来实现

    function Counter() {
      const [count, setCount] = React.useState(0)
      
      React.useEffect(() => {
        console.log(count)
      })
      
      return (
        <div>
          Count: {count}
          <button onClick={() => setCount(prevCount => prevCount + 1)}>+</button>
          <button onClick={() => setCount(prevCount => prevCount - 1)}>-</button>
        </div>
      );
    }
    复制代码

    以上代码当我们改变计数的时候,就会打印出正确的计数,我们其实基本可以把 useEffect 看成是 componentDidUpdate,它们的区别我们可以在下一个例子中看到。

    另外 useEffect 还可以返回一个函数,功能类似于 componentWillUnmount

    function Counter() {
      const [count, setCount] = React.useState(0)
      
      React.useEffect(() => {
        console.log(count)
        return () => console.log('clean', count)
      })
      
      // ...
    }
    复制代码

    当我们每次更新计数时,都会先打印 clean 这行 log

    现在我们的需求再次升级了,需要我们在计数器更新以后延时两秒打印出计数。实现这个再简单不过了,我们改造下 useEffect 内部的代码即可

    React.useEffect(() => {
        setTimeout(() => {
            console.log(count)
        }, 2000)
    })
    复制代码

    当我们快速点击按钮后,可以在两秒延时以后看到正确的计数。但是如果我们将这段代码写到 componentDidUpdate 中,事情就变得不一样了。

    componentDidUpdate() {
        setTimeout(() => {
            console.log(this.state.count)
        }, 2000)
    }
    复制代码

    对于这段代码来说,如果我们快速点击按钮,你会在延时两秒后看到打印出了相同的几个计数。这是因为在 useEffect 中我们通过闭包的方式每次都捕获到了正确的计数。但是在 componentDidUpdate 中,通过 this.state.count 的方式只能拿到最新的状态,因为这是一个对象。

    当然如果你只想拿到最新的 state 的话,你可以使用 useRef 来实现。

    function Counter() {
      const [count, setCount] = React.useState(0)
      const ref = React.useRef(count)
      
      React.useEffect(() => {
        ref.current = count
        setTimeout(() => {
            console.log(ref.current)
        }, 2000)
      })
      
      //...
    }
    复制代码

    useRef 可以用来存储任何会改变的值,解决了在函数组件上不能通过实例去存储数据的问题。另外你还可以 useRef 来访问到改变之前的数据。

    function Counter() {
      const [count, setCount] = React.useState(0)
      const ref = React.useRef()
      
      React.useEffect(() => {
        // 可以在重新赋值之前判断先前存储的数据和当前数据的区别
        ref.current = count
      })
      
      <div>
          Count: {count}
          PreCount: {ref.current}
          <button onClick={() => setCount(prevCount => prevCount + 1)}>+</button>
          <button onClick={() => setCount(prevCount => prevCount - 1)}>-</button>
      </div>
      
      //...
    }
    复制代码

    现在需求再次升级,我们需要通过接口来获取初始计数,我们通过 setTimeout 来模拟这个行为。

    function Counter() {
      const [count, setCount] = React.useState();
      const [loading, setLoading] = React.useState(true);
    
      React.useEffect(() => {
        setLoading(true);
        setTimeout(() => {
          setCount(1);
          setLoading(false);
        }, 2000);
      });
      return (
        <div>
          {!loading ? (
            <div>
              Count: {count}
              <button onClick={() => setCount(pre => pre + 1)}>+</button>
              <button onClick={() => setCount(pre => pre - 1)}>-</button>
            </div>
          ) : (
            <div>loading</div>
          )}
        </div>
      );
    }
    复制代码

    如果你去执行这段代码,会发现 useEffect 无限执行。这是因为在 useEffect 内部再次触发了状态更新,因此 useEffect 会再次执行。

    解决这个问题我们可以通过 useEffect 的第二个参数解决

    React.useEffect(() => {
        setLoading(true);
        setTimeout(() => {
          setCount(1);
          setLoading(false);
        }, 2000);
    }, []);
    复制代码

    第二个参数传入一个依赖数组,只有依赖的属性变更了,才会再次触发 useEffect 的执行。在上述例子中,我们传入一个空数组就代表这个 useEffect 只会执行一次。

    现在我们的代码有点丑陋了,可以将请求的这部分代码单独抽离成一个函数,你可能会这样写

    const fetch = () => {
        setLoading(true);
        setTimeout(() => {
          setCount(1);
          setLoading(false);
        }, 2000);
    }
    
    React.useEffect(() => {
        fetch()
    }, [fetch]);
    复制代码

    但是这段代码出现的问题和一开始的是一样的,还是会无限执行。这是因为虽然你传入了依赖,但是每次组件更新的时候 fetch 都会重新创建,因此 useEffect 认为依赖已经更新了,所以再次执行回调。

    解决这个问题我们需要使用到一个新的 Hooks useCallback。这个 Hooks 可以生成一个不随着组件更新而再次创建的 callback,接下来我们通过这个 Hooks 再次改造下代码

    const fetch = React.useCallback(() => {
        setLoading(true);
        setTimeout(() => {
          setCount(1);
          setLoading(false);
        }, 2000);
    }, [])
    
    React.useEffect(() => {
        fetch()
    }, [fetch]);
    复制代码

    大功告成,我们已经通过几个 Hooks + 函数组件完美实现了原本需要 class 组件才能完成的事情。

    总结

    通过几个计数器的需求我们学习了一些常用的 Hooks,接下来总结一下这部分的内容。

    • useState:传入我们所需的初始状态,返回一个常量状态以及改变状态的函数
    • useEffect:第一个参数接受一个 callback,每次组件更新都会执行这个 callback,并且 callback 可以返回一个函数,该函数会在每次组件销毁前执行。如果 useEffect 内部有依赖外部的属性,并且希望依赖属性不改变就不重复执行 useEffect 的话,可以传入一个依赖数组作为第二个参数
    • useRef:如果你需要有一个地方来存储变化的数据
    • useCallback:如果你需要一个不会随着组件更新而重新创建的 callback

    另外我还封装了几个常用的 Hooks API,有兴趣的可以阅读下代码,仓库中的代码会持续更新。

    最后

    我们通过这篇文章学习了如何使用 Hooks,如果你还有什么疑问欢迎在评论区与我互动。

    我所有的系列文章都会在我的 Github 中最先更新,有兴趣的可以关注下。今年主要会着重写以下三个专栏

    • 重学 JS
    • React 进阶
    • 重写组件

    最后,觉得内容有帮助可以关注下我的公众号 「前端真好玩」咯,会有很多好东西等着你。

    展开全文
  • 我们通过create-react-app 创建了简单的 react 项目,也查看了这个自动创建的项目的目录; 下面看一下,这个 react 页面是如何显示的:   第一步,我们打开 public 目录下的index.html   即便我们对这个r...
  • 1、创建项目:create-react-app reactProject 2、yarn eject 暴露react项目的配置项,发现文件夹下面增加了目录 config scripts 非常重要需要安装 less 和 less-loader ...打开文件在 49行差不多的位置可以找...
  • 首先,贴一下我的错误,在使用create-react-app创建一个项目之后,我用vscode打开这个项目,并且在终端输入命令npm start之后,出现报错的情况: jianshu@0.1.0 start C:\Users\23902\Desktop\jianshu > react-...
  • 近日很多人反映React-native-camera怎么用?还有人说iOS的二维码扫描咋没有呢?其实这些问题在react-native-camera上都有介绍,在ideacreation/React-native-barcodescanner中也有讲,如果是ios的话请使用react-...
  • 近日很多人反映react-native-camera怎么用?还有人说ios的二维码扫描咋没有呢?其实这些问题在react-native-camera上都有介绍,在ideacreation/React-native-barcodescanner中也有讲,如果是ios的话请使用react-...
  • 概述 SPA和react可以说是web开发的分水岭,我一直在寻找判断网站是普通网站还是SPA抑或是react的方法。...如果网站的导航全是新打开一个窗口,那么这个网站一定不是react搭建的,甚至连SPA都不是。 (2)按F12...
  • 安装完成之后,打开命令行工具(win+r,然后输入cmd),输入 node -v,如果出现相应的版本号,则说明安装成功。 淘宝镜像安装cnpm 打开命令行工具,把这个(npm install -g cnpm --registry= htt...
  • 需要知道共享打印机的主机ip地址之后...然后打开设置页面中的【设备】; 2、点击设备页面左侧的【打印机和扫描仪】,点击设置页面的加号添加新的打印机;然后选择橙色字体的【我需要的打印机不在列表中】; 3、在...
  • 功能需求:React单页应用的时候,用户打开A页面,然后操作了A页面相关功能,比如在table里面进行了筛选,选中了几个选项。 然后点击查看详情跳转到B页面,B页面操作完的时候,点击按钮跳转到A页面,这时候A页面之前...
  • React 运行

    2019-10-31 15:17:44
    今天第一次接触前端 React 框架,从github上讲一个 react 框架拉下来,却发现不管怎么样运行都跑不起来,发现原来是没有安装项目依赖包,也就是 node_modules文件夹 进入 mac 终端,进入到当前框架目录下,输入 npm ...
  • 下载好了夜神模拟器,然后...然鹅,当我command+R打开dos运行react-native run-android命令后,项目是成功在夜神模拟器上执行了,我又修改了App.js的内容,回过头来看夜神模拟器上的界面,嗯!?内容没更新???...
  • 昨天 React Native 官方团队在 reddit 上发起了一次 AUA(ask us anything)活动,地址在文末。看到这个活动的时候,我脑海里想到...你们是怎么看待 Flutter 的,和 Flutter 比起来 React Native 有什么优劣? 官方回...
  • 第一节 我们先来说一下怎么搭建React ,或者是更合适的方法。 1、安装Nodejs 地址: https://nodejs.org/en/download/ 来这里下载,然后安装。至于怎么下载,怎么安装,跟你安装QQ思路差不多,安装完了也不用配置...
  • 列表作为移动应用中承载主题内容信息的重要组件,React Native早先出道的ListView坑了不少人,今天让我们一起来学习一下,打开React Native列表组件的正确姿势。本场Chat的内容包括: 我们什么时候需要用列表组件 ...
  • RN的开发中,很多时候需要导航或者跳转,那么就来看看具体怎么使用,在rn之前的版本中有一个navigator可以使用的,但是现在的版本已经更新,所有与导航相关的都放在了React Navigation中 第一步:安装React ...
  • 该入门工具随附了主要的Gatsby配置文件,您可能需要使用React的快速应用生成器来快速启动和运行。 还有其他更具体的想法吗? 您可能需要查看我们充满活力的集合。 :rocket: 快速开始 创建一个Gatsby网站。 使用...
  • 1、本篇章配置一个 webpack 打包项目2、简述 jsx 语法配置支持使用 IDE 打开目录 在命令行中初化化项目npm init -y然后安装 webpackcnpm i webpack -D然后安装 webpack-cli webpack-cli 用来执行webpack相关命令cnpm...
  • :construction_worker: 怎么跑 您需要先安装和 ,然后再安装: 安装依赖项 yarn install 运行应用 yarn dev 用浏览器打开以查看结果。 :bug: 问题 随时在存储库中提交带有相应标题和描述的新期刊。 如果您已经...
  • React团队在今年二月发布了React 16.8,想必打开这篇文章的你一定知道这个版本包含了一个令人期待的新特性:Hooks。 作为React 16.8的宠儿Hooks,大家也很关心其带来的变化,其中备受关注的一点就是状态管理,以至于...
  • 我也不知道为什么,我的电脑执行命令之后直接开始给我安装依赖了,改天还得研究一下怎么回事(包括公司和家里的两台都是),并且公司电脑自动用yarn,家里电脑自动用npm(家里电脑没安装yarn环境) 项目...
  • React入门笔记

    2017-08-16 12:18:52
    React入门可以看看阮大师的这篇文章:文章打开以为很长,结果页面中70%是评论,所以不要害怕,这篇文章很短。看完这篇文章再去啃React Chain的文档会比较好,基本是React官方文档的中文翻译。笔记 【Demo1】单页显示...
  • React笔记(一)--第一个React代码

    千次阅读 2017-02-17 15:33:56
    这篇文章是怎么顺利运行第一个react代码。 最好的学习资源:阮一峰的React 入门实例教程 react中文网 准备工作:node环境、全局安装bower、安装git step1. 在桌面建项目文件夹 打开命令黑窗口,cd切换到项目...
  • 使用存储React-源码

    2021-02-20 09:11:13
    usePersistedState:允许您存储数据并在React应用程序中的任何位置访问数据,即使该应用程序在不同的选项卡或窗口(在同一浏览器上)打开也是如此。 即使关闭应用程序,数据也将保留(如果清除了本地存储,则数据将...
  • 初探react之state

    2020-11-23 17:22:39
    当下前端最流行的3大框架,vue、react、angular,既然已经接触了前端框架 怎么能不去领会下react的魅力。 在vue中 组件内的数据使用的最多的是data 和props ,在react 中同样存在这2个概念,它们叫state和props ...

空空如也

空空如也

1 2 3 4 5 ... 9
收藏数 170
精华内容 68
关键字:

怎么打开react