react----useEffect副作用(加载更多按钮、购物车全选单选 就会用到这个)

hooks

useState 可以定义一个局部状态数据

useEffect 副作用,当一个数据或者属性发生改变之后会引起的一些变化

console.count() 在调用时会将数字(调用次数)写入到控制台。
console.count() 方法可以添加标签。
console.count() 每次调用,如果标签一样,则对应的奇数数字会增加 1,如果不一样则重新开始计数。

在这里插入图片描述

    <title>useEffect</title>
  </head>
  <body>
    <div id="app"></div>
    <script src="./libs/babel.min.js"></script>
    <script src="./libs/react.js"></script>
    <script src="./libs/react-dom.js"></script>
    <script type="text/babel">
      const { useState, useEffect } = React;
      // function App(props){...}  // 函数的两种写法
      const App = (props) => {
        /* 当属性或者state改变之后functipn会重新执行
        useState对前面的会进行数据缓存,他们不会更新,否则会出现死循环 */
        console.count("组件重新渲染了");
        const [list, setList] = useState([]);
        const [count, setCount] = useState(0);
        const [page, setPage] = useState(1);
        /* useEffect副作用会接受两个参数,第一个是回调函数,第二个是依赖项,
        也就是说,当第二个参数[]中的内容发生了改变,
        会执行前面的函数也就是第一个参数(如果[]内有多个值,只要有且最少有一个变化就会执行前面的函数
        当第二个参数只是个[]空数组的时候,只会在初始化的时候执行一次   */
        /* 比如只想加载一次数据,[]内就不需要添加内容,就只会在初始化的时候执行一次,
        但如果最初有值时(page=1),就不需要再loadData() */
        useEffect(() => {
          // 回调函数会执行
          // 如果写成空数组依赖 表示只有初始化的时候会执行一次
          // loadData();
          console.count("初始化"); // 我是1: 1
        }, []);
        useEffect(() => {
          console.count("count值变了"); // 我是2,我变了: 1  // 后面的数字是每点击一次就加一,即点击的次数,且每次都重新打印
        }, [count]);
        useEffect(() => {
          loadData();
        }, [page]);
        const loadData = () => {
          fetch("http://localhost:3009/api/v1/books?page=" + page)
            .then((res) => res.json())
            .then((res) => setList([...list, ...res.books]));
        };
        // useEffect(() => {
        //   console.count("list值变了");
        // }, [list]);
        // useEffect(() => {
        //   console.count("list count值变了");
        // }, [list, count]);
        return (
          <div>
            <h3 onClick={() => setCount(count + 1)}>我是一个组件-{count}</h3>
            <ul>
              {list.map((item) => (
                <li key={item._id}>{item.title}</li>
              ))}
            </ul>
            <button onClick={() => setPage(page + 1)}>加载数据</button>
          </div>
        );
      };
      ReactDOM.render(<App />, document.getElementById("app"));
    </script>
  </body>
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要使用 `react-native-svg` 和 `react-native-svg-transformer` 加载本地 SVG 图像,你可以按照以下步骤进行操作: 1. 首先,确保你已经在项目中安装了 `react-native-svg` 和 `react-native-svg-transformer` 依赖。你可以通过运行以下命令来安装它们: ``` npm install react-native-svg react-native-svg-transformer ``` 2. 在项目的根目录下创建一个名为 `metro.config.js` 的文件(如果已存在,请跳过此步骤)。 3. 在 `metro.config.js` 文件中添加以下内容: ```javascript module.exports = { transformer: { assetPlugins: ['react-native-svg-transformer'], }, }; ``` 4. 接下来,在你的组件中,使用 `react-native-svg` 中的 `<SvgUri>` 组件来加载本地 SVG 图像。首先,确保你的 SVG 图像位于项目的 `assets` 文件夹中。 ```javascript import React from 'react'; import { View } from 'react-native'; import SvgUri from 'react-native-svg-uri'; const MyComponent = () => { return ( <View> <SvgUri width={200} height={200} source={require('./assets/myImage.svg')} /> </View> ); }; export default MyComponent; ``` 在上面的示例中,我们使用 `require` 方法加载位于 `assets` 文件夹中的 `myImage.svg` 图像,并将其作为 `source` 属性传递给 `<SvgUri>` 组件。你可以根据自己的需要调整宽度和高度。 5. 确保你在重新启动 Metro Bundler 之前完成了以上步骤。你可以通过运行以下命令重新启动 Metro Bundler: ``` npx react-native start --reset-cache ``` 这样,你就可以使用 `react-native-svg` 和 `react-native-svg-transformer` 成功加载和显示本地 SVG 图像了。 希望对你有所帮助!如有任何疑问,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值