React项目实战之租房app项目(七)列表找房模块之条件筛选

2023-11-15

前言

一、列表找房模块-条件筛选(下)

1.1 前三个菜单对应的内容组件FilterPicker实现

1.1.1 思路分析

1、点击前三个标题展示该组件,点击取消的时候隐藏
2、使用PickerView组件来实现页面效果
3、获取到PickerView组件中,选中的筛选条件值
4、点击确定按钮,隐藏该组件,将获取到的筛选条件值传递给父组件
5、由父组件提供展示或隐藏对话框的状态,通过props传递给子组件
6、由父组件提供通过筛选条件获取到的数据(因为所有筛选条件是通过后端接口来获取的),通过props传递给子组件

1.1.2 实现步骤

在Filter组件中需要完成的步骤:

1、提供组件展示或隐藏的状态:openType
2、在render方法中判断当openType的值为 area/mode/price 时,就显示 FilterPicker组件,以及遮罩层
3、在onTitleClick方法中,修改状态 openType为当前 type,展示对话框
4、提供onCancel方法(作为取消按钮和遮罩层的事件)
5、在onCancel方法中,修改状态 openType为空,隐藏对话框
6、将onCancel通过props传递给FilterPicker组件
7、提供onSave方法,作为确定按钮的事件处理
8、发送请求,获取所有筛选条件数据,将数据保存为状态:filtersData
9、封装方法 renderFilterPicker 来渲染FilterPicker组件
10、在方法中,根据openType的类型,从filtersData中获取需要的数据
11、将数据通过props传递给FilterPicker组件

在FilterPicker组件中需要完成的步骤:

1、接收到数据后,将其作为PickerView组件的data
2、在取消按钮的单击事件中调用父组件传过来的方法

1.1.3 代码示例

在src/pages/HouseList/components/Filter/index.js中添加如下代码:
首先,提供组件展示或隐藏的状态和筛选条件数据:

  state = {
    // 控制 FilterPicker 或 FilterMore 组件的展示或隐藏
    openType: '',
    // 所有筛选条件数据
    filtersData: {}
  }

然后,在render方法中判断openType的值为area/mode/price 时,就显示FilterPicker组件,以及遮罩层:

{/* 前三个菜单的遮罩层 */}
{ openType === "area" || openType === "mode" || openType === "price" ? (<div className={styles.mask}></div>) : ("")}
...
{/* 前三个菜单对应的内容: */}
{openType === "area" || openType === "mode" || openType === "price" ? (<FilterPicker />) : ("")}

然后,在标题点击事件中,修改状态openType为当前type,展示对话框:

  onTitleClick = type => {
    this.setState(prevState => {
      return {
        titleSelectedStatus: {
          // 获取当前对象中所有属性的值
          ...prevState.titleSelectedStatus,
          [type]: true
        },

        // 展示对话框
        openType: type
      }
    })
  }

然后,新建onCancel方法,作为取消按钮和遮罩层的事件:

  // 取消(隐藏对话框)
  onCancel = () => {
    this.setState({
      openType: ''
    })
  }

然后,提供onSave方法,作为确定按钮的事件处理

// 保存,隐藏对话框
onSave = () => {
  this.setState({
    openType: ""
  });
};

// 传递给FilterPicker
<FilterPicker
    onCancel={this.onCancel}
    onSave={this.onSave}
/>

//在FilterPicker里面进行一次中转,最后这个按钮是在FilterFooter里面
render() {
  let { onCancel ,onSave} = this.props;
  return (
    <>
      {/* 选择器组件: */}
      <PickerView data={province} value={null} cols={3} />


      {/* 底部按钮 */}
      <FilterFooter onCancel={onCancel} onOk={onSave}/>
    </>
  );
}


// 在FilterFooter里面调用
function FilterFooter({
  cancelText = '取消',
  okText = '确定',
  onCancel,
  onOk,
  className
}) {
  return (
    <Flex className={[styles.root, className || ''].join(' ')}>
      {/* 取消按钮 */}
      <span
        className={[styles.btn, styles.cancel].join(' ')}
        onClick={onCancel}
      >
        {cancelText}
      </span>

      {/* 确定按钮 */}
      <span className={[styles.btn, styles.ok].join(' ')} onClick={onOk}>
        {okText}
      </span>
    </Flex>
  )
}

然后,发送请求,获取所有筛选条件数据:

  // 封装获取所有筛选条件的方法
  async getFiltersData() {
    // 获取当前定位城市id
    const { value } = JSON.parse(localStorage.getItem('hkzf_city'))
    const res = await API.get(`/houses/condition?id=${value}`)

    this.setState({
      filtersData: res.data.body
    })
  }

然后,封装方法渲染FilterPicker组件:

  // 渲染 FilterPicker 组件的方法
  renderFilterPicker() {
    const {
      openType,
      filtersData: { area, subway, rentType, price }
    } = this.state

    if (openType !== 'area' && openType !== 'mode' && openType !== 'price') {
      return null
    }

    // 根据 openType 来拿到当前筛选条件数据
    let data = []
    let cols = 3
    switch (openType) {
      case 'area':
        // 获取到区域数据
        data = [area, subway]
        cols = 3
        break
      case 'mode':
        data = rentType
        cols = 1
        break
      case 'price':
        data = price
        cols = 1
        break
      default:
        break
    }

    return (
      <FilterPicker
        onCancel={this.onCancel}
        onSave={this.onSave}
        data={data}
        cols={cols}
      />
    )
  }

在src/pages/HouseList/components/FilterPicker/index.js中添加如下代码:
首先,接收到数据后,将其作为PickerView组件的data:

export default class FilterPicker extends Component {
  render() {
    const { onCancel, onSave, data, cols } = this.props
    return (
      <>
        {/* 选择器组件: */}
        <PickerView data={data} value={null} cols={cols} />

        {/* 底部按钮 */}
        <FilterFooter onCancel={() => onCancel()} onOk={() => onSave()} />
      </>
    )
  }
}

然后,添加状态value用于获取PickerView组件的选中值:

  state = {
    value: null
  }

然后,给PickerView组件添加配置项onChange,通过参数获取到选中值,并更新状态 value:

<PickerView
  data={data}
  // 我们一旦监听了 onChange事件,同步了value值,那么这个组件成了受控组件,所以我们需要同步value的值
  value={this.state.value}
  cols={cols}
  onChange={val => {
    this.setState({ value: val });
  }}
/>

然后,在确定按钮的事件处理程序中,将type 和 value 作为参数传递给父组件:

{/* 底部按钮 */}
<FilterFooter onCancel={onCancel} onOk={() => onSave(type,this.state.value)} />

1.2 设置默认选中值

1.2.1 需求

如果是之前已经选中某项,当我们再次显示FilterPicker的时候,应该展示默认选中项

1.2.2 实现步骤

1、在Filter组件中,提供选中值状态: selectedValues
2、通过openType获取到当前类型的选中值(defaultValue),通过props传递给FilterPicker组件
3、在FilterPicker组件中,将当前defaultValue设置为状态value的默认值
4、在点击确定按钮后,在Filter组件中更新当前type对应的selectedValues状态值

1.2.3 代码示例

在src/pages/HouseList/components/Filter/index.js中添加如下代码:
首先,提供选中值状态:

// 默认选中的状态
const selectedValues = {
  area: ["area", null],
  mode: ["null"],
  price: ["null"],
  more: []
};
...
  state = {
    ...
    // 筛选默认选中的状态值
    selectedValues
  };

然后,获取到当前类型的选中值,通过props传递给FilterPicker组件:

const {
  ...,
  selectedValues
} = this.state;
// 默认选中值
let defaultValue = selectedValues[openType];
...
<FilterPicker
  ...
  defaultValue={defaultValue}
/>

然后,在点击确定按钮后,更新当前type对应的selectedValues状态值:

// 保存,隐藏对话框
onSave = (type, value) => {
  this.setState({
    openType: '',
    selectedValues: {
      ...this.state.selectedValues,
      [type]: value
    }
  });
};

1.2.4 默认值不生效问题

问题描述:在前面三个标签之间来回切换时候,默认选中值不会生效,只有当点击确定,重新打开FilterPicker组件时,才会生效
分析:两种操作方式的区别在于有没有重新创建FilterPicker组件,重新创建的时候,会生效,不重新创建,不会生效
原因:不重新创建FilterPicker组件时,不会再次执行state初始化,也就拿不到最新的props
解决方式:给FilterPicker组件添加key值为openType,这样,在不同标题之间切换时候,key值都不相同,React内部会在key不同时候,重新创建该组件

1.3 完善FilterTitle高亮功能

1.3.1 实现思路

1、点击标题时,遍历标题高亮数据
2、如果是当前标题,直接设置为高亮
3、分别判断每个标题对应的筛选条件有没有选中值(判断每个筛选条件的选中值与默认值是否相同,相同表示没有选中值,不同,表示选中了值)
    * selectedVal 表示当前type的选中值
    * 如果type为area,此时,selectedVal.length !== 2 || selectedVal[0] !== 'area',就表示已经有选中值
    * 如果 type 为 mode,此时,selectedVal[0] !== 'null',就表示已经有选中值
    * 如果 type 为 price,此时,selectedVal[0] !== 'null',就表示有选中值
4、如果有,就让该标题保持高亮
5、如果没有,就让该标题取消高亮
在之前的初始化组件时,我们已经完成了前两步,现在来继续实现后面三步

1.3.2 实现步骤

1、在标题点击事件 onTitleClick事件里面,获取到两个状态:标题选中状态对象和筛选条件的选中值对象
2、根据当前标题选中状态对象,获取到一个新的标题选中状态对象(newTitleSelectedStatus)
3、使用Object.keys(),遍历标题选中状态对象
4、先判断是否为当前标题,如果是,直接让该标题选中状态为true(高亮)
5、否则,分别判断每个标题的选中值是否与默认值相同
6、如果不同,则设置该标题的选中状态为true
7、如果相同,则设置该标题的选中状态为false
8、更新状态 titleSelectedStatus的值为: newTitleSelectedStatus

1.3.3 代码示例

在src/pages/Houselist/components/Filter/index.js中添加如下代码:

  onTitleClick = type => {
    const { titleSelectedStatus, selectedValues } = this.state
    // 创建新的标题选中状态对象
    const newTitleSelectedStatus = { ...titleSelectedStatus }

    // 遍历标题选中状态对象
    // Object.keys() => ['area', 'mode', 'price', 'more']
    Object.keys(titleSelectedStatus).forEach(key => {
      // key 表示数组中的每一项,此处,就是每个标题的 type 值。
      if (key === type) {
        // 当前标题
        newTitleSelectedStatus[type] = true
        return
      }

      // 其他标题:
      const selectedVal = selectedValues[key]
      if (
        key === 'area' &&
        (selectedVal.length !== 2 || selectedVal[0] !== 'area')
      ) {
        // 高亮
        newTitleSelectedStatus[key] = true
      } else if (key === 'mode' && selectedVal[0] !== 'null') {
        // 高亮
        newTitleSelectedStatus[key] = true
      } else if (key === 'price' && selectedVal[0] !== 'null') {
        // 高亮
        newTitleSelectedStatus[key] = true
      } else if (key === 'more') {
        // 更多选择项 FilterMore 组件
      } else {
        newTitleSelectedStatus[key] = false
      }
    })

    this.setState({
      // 展示对话框
      openType: type,
      // 使用新的标题选中状态对象来更新
      titleSelectedStatus: newTitleSelectedStatus
    })
  }

1.4 列表找房模块-FilterMore组件实现

1.4.1 渲染组件数据

实现步骤:

1、封装renderFilterMore方法,渲染FilterMore组件
2、从filtersData中,获取数据(roomType,oriented,floor,characteristic),通过props传递给FilterMore组件
3、FilterMore组件中,通过props获取到数据,分别将数据传递给renderFilters方法
4、在renderFilters方法中,通过参数接收数据,遍历数据,渲染标签

代码示例:
在src/pages/Houselist/components/Filter/index.js中添加如下代码:

renderFilterMore() {
  // 获取对应数据 roomType,oriented,floor,characteristic
  const {
    openType,
    filtersData: { roomType, oriented, floor, characteristic }
  } = this.state;
  // 把数据封装到一个对象中,方便传递
  const data = {
    roomType,
    oriented,
    floor,
    characteristic
  };
  if (openType !== "more") {
    return null;
  }
  // 传递给子组件
  return <FilterMore data={data}/>;
}
在src/pages/Houselist/components/FilterMore/index.js中添加如下代码:

// 渲染标签
renderFilters(data) {
  // 高亮类名: styles.tagActive
  return data.map(item => {
    return (
      <span key={item.value} className={[styles.tag].join(" ")}>{item.label}</span>
    );
  });
}

render() {
  const {
    data: { roomType, oriented, floor, characteristic }
  } = this.props;
  return (
    <div className={styles.root}>
      ...
      <div className={styles.tags}>
        <dl className={styles.dl}>
          <dt className={styles.dt}> 户型 </dt>
          <dd className={styles.dd}> {this.renderFilters(roomType)} </dd>
          <dt className={styles.dt}> 朝向 </dt>
          <dd className={styles.dd}> {this.renderFilters(oriented)} </dd>
          <dt className={styles.dt}> 楼层 </dt>
          <dd className={styles.dd}> {this.renderFilters(floor)} </dd>
          <dt className={styles.dt}> 房屋亮点 </dt>
          <dd className={styles.dd}>
          ...
      </div>
      ...
    </div>
  );
}

1.4.2 获取选中值并且高亮显示

实现步骤:

1、在state中添加状态 selectedValues
2、给标签绑定单击事件,通过参数获取到当前项的value
3、判断selectedValues中是否包含当前value值
4、如果不包含,就将当前项的value添加到selectedValues数组中
5、如果包含,就从selectedValues数组中移除(使用数组的splice方法,根据索引号删除)
6、在渲染标签时,判断selectedValues数组中,是否包含当前项的value,包含,就添加高亮类

代码示例:
在src/pages/Houselist/components/FilterMore/index.js中添加如下代码:

  state = {
    selectedValues: []
  }

  onTagClick(value) {
    const { selectedValues } = this.state
    // 创建新数组
    const newSelectedValues = [...selectedValues]

    if (newSelectedValues.indexOf(value) <= -1) {
      // 没有当前项的值
      newSelectedValues.push(value)
    } else {
      // 有
      const index = newSelectedValues.findIndex(item => item === value)
      newSelectedValues.splice(index, 1)
    }

    this.setState({
      selectedValues: newSelectedValues
    })
  }

  // 渲染标签
  renderFilters(data) {
    const { selectedValues } = this.state
    // 高亮类名: styles.tagActive
    return data.map(item => {
      const isSelected = selectedValues.indexOf(item.value) > -1

      return (
        <span
          key={item.value}
          className={[styles.tag, isSelected ? styles.tagActive : ''].join(' ')}
          onClick={() => this.onTagClick(item.value)}
        >
          {item.label}
        </span>
      )
    })
  }

1.4.3 清除和确定按钮的逻辑处理

实现步骤:

1、设置FilterFooter组件的取消按钮文字为: 清除
2、点击取消按钮时,清空所有选中的项的值(selectedValues:[]3、点击确定按钮时,将当前选中项的值和type,传递给Filter父组件
4、在Filter组件中的onSave方法中,接收传递过来的选中值,更新状态selectedValues

代码示例:
在src/pages/Houselist/components/FilterMore/index.js中添加如下代码:

 // 取消按钮的事件处理程序
  onCancel = () => {
    this.setState({
      selectedValues: []
    })
  }

  // 确定按钮的事件处理程序
  onOk = () => {
    const { type, onSave } = this.props
    // onSave 是父组件中的方法
    onSave(type, this.state.selectedValues)
  }

        <FilterFooter
          className={styles.footer}
          cancelText="清除"
          onCancel={this.onCancel}
          onOk={this.onOk}
        />
在src/pages/Houselist/components/Filter/index.js中添加如下代码:

//传递type跟onSave
<FilterMore data={data} type={openType} onSave={this.onSave} defaultValues={defaultValues}/>;

1.4.4 设置默认选中值

实现步骤:

1、在渲染FilterMore组件时,从selectedValues中,获取到当前选中值more
2、通过props讲选中值传递给FilterMore组件
3、在FilterMore组件中,讲获取到的选中值,设置为子组件状态selectedValues的默认值
4、给遮罩层绑定事件,在事件中,调用父组件的onCancel关闭FilterMore组件

代码示例:
在src/pages/Houselist/components/Filter/index.js中添加如下代码:

renderFilterMore() {
  ...
  let defaultValues = selectedValues.more
  // 传递给子组件
  return <FilterMore data={data} type={openType} onSave={this.onSave} defaultValues={defaultValues} onCancel={this.onCancel}/>;
}
在src/pages/Houselist/components/FilterMore/index.js中添加如下代码:

state = {
  selectedValues: this.props.defaultValues
};

{/* 遮罩层 */} 
<div className={styles.mask} onClick={this.props.onCancel}/>

1.4.5 完善FilterTitle高亮功能

实现步骤:

1、在Filter组件的onTitleClick方法中,添加type为more的判断条件
2、当选中值数组长度不为0的时候,表示FilterMore组件中有选中项,此时,设置选中状态高亮
3、点击确定按钮时,根据参数type和value,判断当前菜单是否高亮
4、在关闭对话框时(onCancel),根据type和当前type的选中值,判断当前菜单是否高亮

代码示例:
在src/pages/Houselist/components/Filter/index.js中添加如下代码:

// 保存,隐藏对话框
  onSave = (type, value) => {
    const { titleSelectedStatus } = this.state;
    let newTitleSelectedStatus = { ...titleSelectedStatus };
    let selectedVal = value;
    if (
      type === "area" &&
      (selectedVal.length !== 2 || selectedVal[0] !== "area")
    ) {
      newTitleSelectedStatus[type] = true;
    } else if (type === "mode" && selectedVal[0] !== "null") {
      newTitleSelectedStatus[type] = true;
    } else if (type === "price" && selectedVal[0] !== "null") {
      newTitleSelectedStatus[type] = true;
    } else if (type === "more" && selectedVal.length !== 0) {
      // 更多选择
      newTitleSelectedStatus[type] = true;
    } else {
      newTitleSelectedStatus[type] = false;
    }
    this.setState({
      openType: "",
      titleSelectedStatus: newTitleSelectedStatus,
      selectedValues: {
        ...this.state.selectedValues,
        [type]: value
      }
    });
  };

总结

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

React项目实战之租房app项目(七)列表找房模块之条件筛选 的相关文章

  • React + Redux 和 REST API?

    我在 Node 中构建了一个简单的 CRUD 应用程序 并已在 Express 中完成了其余 API 的创建 我现在正在寻求添加前端功能 并希望使用 React Redux 作为学习练习 然而 似乎所有围绕此的教程都直接使用 Redux 访
  • Angularjs - ng-click 函数与指令

    我无法决定在以下情况下使用哪种方法 我试图在点击按钮时发出警报 我可以使用两种方法来做到这一点 哪个是最佳实践 请告诉我为什么 Method 1 div div
  • JavaScript 检查 Gmail 未读邮件计数

    在javascript中如何获取当前登录的gmail帐户的未读电子邮件数量 相关问题 Google 是否提供有关此类内容的任何文档 这是您正在寻找的文档 http code google com apis gmail docs http c
  • Bootstrap 切换导航项在单击后保持打开状态

    我有简单的 Bootstrap 3 切换导航 ul class nav navmenu nav clearfix li class navmenu brand dropdown clearfix a href class dropdown
  • Mobile Safari 中的 React PWA 图像上传会破坏应用程序吗?

    我们很惊讶在网上没有发现任何提及此问题的信息 因此我们在此发帖希望能找到解决方案 当我们在使用 iPhone 进行移动 Safari 浏览时遇到此问题 运行下面 2 个易于遵循的测试 一个有效 一个无效 链接在这里https pwa rea
  • 随机字体颜色

    我需要用 2 或 3 种随机颜色为文本着色 我如何在 PHP 或 JavaScript 中执行此操作 color str pad sprintf x x x rand 0 255 rand 0 255 rand 0 255 6 rand 0
  • 使用 useCallback 并使用先前状态作为参数设置新对象状态

    考虑这个带有自定义表单钩子的基本表单字段组件来处理输入更改 import React useState useCallback from react const useFormInputs initialState gt const val
  • 在tinymce 4中裁剪后上传图像

    我正在开发tinymce 并且已经实现了imagetools 现在 当图像插入到文本编辑器中 然后我编辑 裁剪图像时 它将图像 src 更改为类似的内容blob www localhost asdf ghij 我想要的是裁剪后我可以将此 u
  • 纯组件在没有变化时渲染?

    我有一个像这样的纯组件 interface Props checkBoxTitleStyle any checkBoxBackgroundColor any onPressCheckBox id isChecked selectedArra
  • React hooks 需要返回值吗?

    我最近开始在我的 React 应用程序中构建自定义挂钩 并一直在关注 React 网站上的文档 然而 我正在构建的钩子不需要返回值 因为它们在初始化时为 Redux 设置数据 Example custom hook export const
  • (typeof variable === "function") 和 jQuery.isFunction() 有什么区别?

    我一直用 typeof variable function 我偶然发现jQuery isFunction 我想知道 jQuery方法中的typeof方法有什么区别 不仅有什么区别 而且 什么时候适合使用typeof方法 什么时候适合使用jQ
  • BigVideo.js 播放结束时 URL 重定向

    我已经使用基于 Video js 的 BigVideo 在页面上实现了背景视频 单击 div 时 视频会在后台播放 我一生都无法弄清楚如何在视频播放完毕后重定向到另一个 URL 这是我正在使用的代码 视频播放链接 a href vids g
  • 动态 getter 和 setter - 一种可能性

    我正在尝试解决最近出现的一个问题 假设我们想要并且知道如何在 javascript 中使用动态 getter 和 setter 就像 php 中的那样 get set 但由于 javascript 没有包罗万象的属性 我们唯一能做的就是提供
  • 如何在 TypeScript 中声明私有抽象方法?

    如何在 TypeScript 中正确定义私有抽象方法 这是一个简单的代码 abstract class Fruit name string constructor name string this name name abstract pr
  • jquery中(“*”)有什么用

    我正在阅读 jQuery 我不知道为什么使用 请解释一下这有帮助 是jquery中的一个选择器 它可以无条件地选择所有内容 包括html head和body 这是一个解释其用法的示例 document ready function butt
  • 谷歌地图使用值 BESbswy 在内部创建隐藏的 div 和 span 并降低角度性能

    我在我的角度项目上使用谷歌地图 API v3 但是当我将地图添加到我的项目时 谷歌地图会创建一个隐藏的 div style height 1px width 1px span style font size 48px width 1 hei
  • 单击通知时反应本机导航到特定屏幕

    我正在尝试在用户单击他们收到的通知时实现导航 我已成功收到通知expo notifications并接受来自 API 的数据 路由 但当用户单击通知时无法导航到另一个屏幕 使用通知 export default useNotificatio
  • 如何将内容放在article.js之上/之上

    So I am trying to create a navigation and footer in the body of the website but the particle js keeps coming over those
  • iOS 6 上的 Safari 是否缓存 $.ajax 结果?

    自从升级到 iOS 6 以来 我们看到 Safari 的网页视图擅自缓存 ajax来电 这是在 PhoneGap 应用程序的上下文中 因此它使用 Safari WebView 我们的 ajax电话是POST方法并且我们将缓存设置为 fals
  • 如何强制重新安装 React 组件?

    假设我有一个具有条件渲染的视图组件 render if this state employed return div div

随机推荐

  • 【trajectory optimization】1 intro

    满足所有constraints 的是feasible solution可行解 admissible control 容许控制 可行控制 轨迹优化是根据目标函数objective function 描述寻找最优轨迹optimal trajec
  • 【C语言】14个常用的字符串函数和内存函数

    文章目录 一 strlen 1 函数原型 2 使用介绍 3 三种模拟实现 计数器法 利用递归 指针相减 二 strcpy 1 函数原型 2 使用介绍 3 模拟实现 三 strcat 1 函数原型 2 使用介绍 3 模拟实现 四 strcmp
  • 论文笔记:COST: CONTRASTIVE LEARNING OF DISENTANGLEDSEASONAL-TREND REPRESENTATIONS FORTIME SERIES FOREC

    ICLR 2022 1 前言介绍 表征学习 对比学习 时间序列预测 首先学习时间序列解耦的representation 然后进行回归任务的精调 对比学习CoST包含时域和频域的contrastive loss gt 学习趋势和周期性repr
  • 【C++初阶】类和对象(下)

    一 再谈构造函数 构造函数其实分为 1 函数体赋值 2 初始化列表 之前所讲到的构造函数其实都是函数体赋值 那么本篇文章将会具体讲述初始化列表 初始化列表 语法 以一个冒号开始 接着是一个以逗号分隔的数据成员列表 每个 成员变量 后面跟 一
  • 2021年蓝桥杯

    专栏 蓝桥杯题目 一 卡片问题 题目解析 由于数据量比较小 直接暴力枚举即可 依题意可以很快知道 卡片最先用完的数是 1 因此遍历足够多的数 将每个数转换成字符类型 计算每个字符里面 1 的个数 注意 1 用完可能不是临界条件 有可能下一个
  • 傻瓜攻略(一)——MATLAB主成分分析(PCA)代码及结果分析实例

    主成分分析 收藏的能不能顺手点个赞啊 嘿嘿 主成分分析法 PCA 是一种高效处理多维数据的多元统计分析方法 将主成分分析用于多指标 变量 的综合评价较为普遍 笔者自从本科学习数学建模就开始接触该方法 但是一直没有系统地整理过 借这个机会总结
  • Python操作之MySQL

    目录 安装PyMySQL PyMySQL操作mysql步骤 创建表格 连接Mysql 游标 事务特性 事务提交 查数据库 增删数据库 封装mysql类 错误处理 总结 安装PyMySQL 在使用Python中我们都要安装相关的库 mysql
  • 7-20 打印九九口诀表 (15分) 下面是一个完整的下三角九九口诀表: 1*1=1 1*2=2 2*2=4 1*3=3 2*3=6 3*3=9 1*4=4 2*4

    7 20 打印九九口诀表 15分 下面是一个完整的下三角九九口诀表 1 1 1 1 2 2 2 2 4 1 3 3 2 3 6 3 3 9 1 4 4 2 4 8 3 4 12 4 4 16 1 5 5 2 5 10 3 5 15 4 5
  • PyQt5探索-1 开始第一个程序

    浅谈PyQt5 PyQt5并不向下兼容PyQt4 主要是由于其有几个较大的改变 虽不兼容 但是旧代码调整到新库并不是很难 它们的主要差异如下 Python的模块已经重新构建 一些模块已经被放弃 如 QtScript 其他的模块被分割到一些子
  • 突破ChatGPT限制:Chat-Upload方法为ChatGPT文件上传带来新的可能性

    大家好 在之前的文章中 我分享了一个关于如何突破ChatGPT无法读取PDF和图片文件的问题的方法 今天 我要继续探讨这个话题 并详细介绍我自己原创的一种文件上传方法 为学习带来了新的可能性 我开发的这个方法被称为 Chat Upload
  • 很抱歉,OneDrive服务器出现问题,请稍后重试。(错误代码:0x8004def5)

    问题来啦 很抱歉 OneDrive服务器出现问题 请稍后重试 错误代码 0x8004def5 微软自带的OneDrive 因可自动云端备份 同步 而广受欢迎 但有小伙伴发现 经常性的 OneDrive登录不上去 出现 很抱歉 OneDriv
  • GmSSL 在Windows上的使用(编译和使用)

    1 源码的下载 GitHub guanzhi GmSSL 支持国密SM2 SM3 SM4 SM9 SSL的密码工具箱 2 编译工具的下载 首先安装VS开发工具 接着下载ActivePerl 打开VS命令提示符 管理员权限 并切换到 Acti
  • 什么是nrm

    什么是nrm nrm是npm的源管理器 这里的源可以理解为是不同的地址 使用场景 因为npm当前的源只能有一个 当你需要使用的源不止一个的时候nrm就可以很好的帮助你管理npm源 安装nrm npm i nrm g 查看源列表 nrm ls
  • virtualbox虚拟机安装64位Linux

    1 准备工作 virtualbox下载地址 https www virtualbox org wiki Downloads 这里下载的是VirtualBox 6 1 30 for Windows hosts x86 amd64 同时还需要下
  • 【一起学Rust】Rust学习前准备——注释和格式化输出

    提示 准备热身 文章目录 前言 一 注释 1 普通注释 2 文档注释 二 格式化输出 输出字符串 输出带有占位符的字符串 输出带有指定格式占位符的字符串 指定宽度对齐 数字输出缺位补0 总结 注释 格式化输出 前言 在正式开始学习Rust之
  • linux : ubuntu JDK安装和环境变量设置

    1 下载JDK 官网下载链接 http www oracle com technetwork java javase downloads index html 华为镜像下载链接 https repo huaweicloud com java
  • C++ scanf语句的各种用法

    scanf语句 scanf本身是C语言的输入语句 但c 是兼容C语言的 头文件是iostream 用万能头的就不用管了 1 输入十进制的数 int a scanf d a scanf i a scanf u a 这三种写法都是可以的 在sc
  • 数据分析和数据挖掘的概念和理念

    1 数据分析和数据挖掘的定义和概念 2 数据分析及数据挖掘的层次 3 数据分析及数据挖掘的模型框架 1 1数据分析及数据挖掘的定义 数据分析 数据分析是指用适当的统计方法对收集来的大量数据进行分析 提取有用信息 和形成结论而对数据加以详细研
  • (5)minikube玩转k8s集群之访问pod里的服务

    配套视频教程 1 Minikube介绍 简单说 创建k8s集群很麻烦 minikube可以让我们快速搭建一个k8s集群用于学习 Minikube 是一种可以让您在本地轻松运行 Kubernetes 的工具 Minikube 在笔记本电脑上的
  • React项目实战之租房app项目(七)列表找房模块之条件筛选

    前言 目录 前言 一 列表找房模块 条件筛选 下 1 1 前三个菜单对应的内容组件FilterPicker实现 1 1 1 思路分析 1 1 2 实现步骤 1 1 3 代码示例 1 2 设置默认选中值 1 2 1 需求 1 2 2 实现步骤