React高级Hook

useReducer 

useReducer 是 React 提供的一个 Hook,用于在函数组件中使用 reducer 函数来管理组件的 state。它类似于 Redux 中的 reducer,但仅用于组件内部的状态管理。useReducer 可以使复杂的状态逻辑更加清晰和可维护。

基本用法

useReducer 接收一个 reducer 函数和一个初始状态,并返回当前的 state 和一个 dispatch 函数。你可以通过 dispatch 函数来触发 reducer 函数,并传递一个 action 对象,reducer 根据 action 来更新 state。

参数
  1. reducer (Function): 一个纯函数,它接收当前的 state 和一个 action 对象,并返回一个新的 state。
  2. initialState (any): 组件的初始状态。
  3. [init (Function)] (可选): 一个可选的初始化函数,如果提供,它将在 reducer 调用之前被调用,以生成初始 state。它接收 initialState 并返回经过初始化的 state。
返回值
  1. state (any): 当前的状态。
  2. dispatch (Function): 一个 dispatch 函数,它接收一个 action 对象,并调用 reducer 函数来更新 state。

示例

下面是一个简单的计数器组件示例,展示了如何使用 useReducer

seReducer 是 React 提供的一个 Hook,用于在函数组件中使用 reducer 函数来管理组件的 state。它类似于 Redux 中的 reducer,但仅用于组件内部的状态管理。useReducer 可以使复杂的状态逻辑更加清晰和可维护。

基本用法

useReducer 接收一个 reducer 函数和一个初始状态,并返回当前的 state 和一个 dispatch 函数。你可以通过 dispatch 函数来触发 reducer 函数,并传递一个 action 对象,reducer 根据 action 来更新 state。

参数
  1. reducer (Function): 一个纯函数,它接收当前的 state 和一个 action 对象,并返回一个新的 state。
  2. initialState (any): 组件的初始状态。
  3. [init (Function)] (可选): 一个可选的初始化函数,如果提供,它将在 reducer 调用之前被调用,以生成初始 state。它接收 initialState 并返回经过初始化的 state。
返回值
  1. state (any): 当前的状态。
  2. dispatch (Function): 一个 dispatch 函数,它接收一个 action 对象,并调用 reducer 函数来更新 state。

示例

下面是一个简单的计数器组件示例,展示了如何使用 useReducer

import React, { useReducer } from 'react';  // 定义 action 类型  
const increment = () => ({ type: 'INCREMENT' });  
const decrement = () => ({ type: 'DECREMENT' });  
const reset = () => ({ type: 'RESET' });  // 定义 reducer 函数  
const counterReducer = (state, action) => {  switch (action.type) {  case 'INCREMENT':  return { count: state.count + 1 };  case 'DECREMENT':  return { count: state.count - 1 };  case 'RESET':  return { count: 0 };  default:  throw new Error();  }  
};  // 初始状态  
const initialState = { count: 0 };  function Counter() {  const [state, dispatch] = useReducer(counterReducer, initialState);  return (  <div>  <h1>Count: {state.count}</h1>  <button onClick={() => dispatch(increment())}>Increment</button>  <button onClick={() => dispatch(decrement())}>Decrement</button>  <button onClick={() => dispatch(reset())}>Reset</button>  </div>  );  
}  export default Counter;

详细说明

  1. 定义 action 类型:
    • incrementdecrementreset 是三个返回 action 对象的函数。每个 action 对象都有一个 type 属性,用于在 reducer 中识别 action。
  2. 定义 reducer 函数:
    • counterReducer 是一个纯函数,它接收当前的 state 和一个 action 对象,并返回一个新的 state
    • 根据 action.type,reducer 更新 state
  3. 初始状态:
    • initialState 是组件的初始状态,这里我们设置 count 为 0。
  4. 使用 useReducer:
    • 在 Counter 组件中,使用 useReducer Hook 传入 counterReducer 和 initialState
    • useReducer 返回当前的 state 和 dispatch 函数。
    • 通过 dispatch 函数调用不同的 action 来更新 state。

复杂示例

在实际应用中,useReducer 通常用于管理更复杂的状态。例如,假设我们有一个待办事项列表。

import React, { useReducer } from 'react';  // 定义 action 类型  
const addTodo = (text) => ({ type: 'ADD_TODO', text });  
const toggleTodo = (id) => ({ type: 'TOGGLE_TODO', id });  // 定义 reducer 函数  
const todoReducer = (state, action) => {  switch (action.type) {  case 'ADD_TODO':  return {  ...state,  todos: [...state.todos, { id: Date.now(), text: action.text, completed: false }],  };  case 'TOGGLE_TODO':  return {  ...state,  todos: state.todos.map((todo) =>  todo.id === action.id ? { ...todo, completed: !todo.completed } : todo  ),  };  default:  throw new Error();  }  
};  // 初始状态  
const initialState = { todos: [] };  function TodoApp() {  const [state, dispatch] = useReducer(todoReducer, initialState);  const handleAddTodo = (e) => {  const text = e.target.value.trim();  if (text) {  dispatch(addTodo(text));  e.target.value = '';  }  };  return (  <div>  <h1>Todo List</h1>  <input type="text" onKeyDown={(e) => e.key === 'Enter' ? handleAddTodo(e) : null} />  <button onClick={handleAddTodo}>Add Todo</button>  <ul>  {state.todos.map((todo) => (  <li key={todo.id} style={{ textDecoration: todo.completed ? 'line-through' : 'none' }}>  <span onClick={() => dispatch(toggleTodo(todo.id))}>  {todo.text}  </span>  </li>  ))}  </ul>  </div>  );  
}  export default TodoApp;

 useMemo

useMemo是React提供的一个自定义Hook,它允许你在渲染过程中执行一些昂贵的计算,并且仅在依赖项发生变化时重新计算。这有助于优化性能,避免在每次渲染时都重新计算相同的数值或对象。

基本语法
const memoizedValue = useMemo(() => computeExpensiveValue(a, b), [a, b]);
  • 第一个参数是一个返回需要记忆值的函数。
  • 第二个参数是一个依赖项数组,这个数组中的值会决定何时重新计算记忆值。
使用场景

useMemo适用于以下场景:

  • 当你有一个计算成本高昂的值,并且这个值在组件的某些渲染中可能保持不变时。
  • 当你想要避免在每次渲染时都重新执行昂贵的计算时。
注意事项
  • useMemo主要用于性能优化,不要滥用。
  • 只有当你确定计算是昂贵的且结果可以安全地在渲染之间共享时才应该使用。
  • useMemo不会阻止渲染,它只会优化计算过程。
使用案例

以下是一个使用useMemo的示例,假设我们有一个React组件,用于显示一个列表中所有项目的名称,并且这个列表可能非常大。我们可以使用useMemo来优化过滤操作,避免在每次渲染时都重新执行过滤逻辑。

import React, { useEffect, useState, useMemo } from 'react';  const LargeListComponent = () => {  const [list, setList] = useState([]);  const [filterText, setFilterText] = useState('');  // 模拟一个大型列表的加载  useEffect(() => {  // 这里通常是从API获取数据,但为了简化,我们使用一个静态数组  const largeList = Array.from({ length: 10000 }, (_, i) => ({  id: i + 1,  name: `Item ${i + 1}`,  }));  setList(largeList);  }, []);  // 使用useMemo来优化过滤操作  const filteredList = useMemo(() => {  return list.filter(item =>  item.name.toLowerCase().includes(filterText.toLowerCase())  );  }, [list, filterText]);  return (  <div>  <input  type="text"  value={filterText}  onChange={(e) => setFilterText(e.target.value)}  placeholder="Filter items..."  />  <ul>  {filteredList.map(item => (  <li key={item.id}>{item.name}</li>  ))}  </ul>  </div>  );  
};  export default LargeListComponent;

在这个例子中,useMemo接收一个过滤函数和一个依赖项数组[list, filterText]。每当listfilterText发生变化时,useMemo会重新执行过滤函数,并返回一个新的过滤后的列表。如果listfilterText都没有变化,那么useMemo会返回上一次计算的结果,从而避免不必要的过滤操作。

这个优化对于大型列表来说是非常有用的,因为它可以减少不必要的计算量,提高组件的渲染性能。

在React和Vue中,useMemo(React)和computed(Vue)都是用于计算派生状态(或称为“计算属性”)的工具,但它们在使用方式和底层实现上有所不同。

React中的useMemo

useMemo是React的一个Hook,它用于在函数组件中优化性能。当你有一个计算成本高昂的值,并且这个值在组件的某些渲染中可能保持不变时,useMemo可以帮助你避免不必要的计算。

useMemo接收一个创建函数和一个依赖项数组。当依赖项数组中的任何一个值发生变化时,创建函数会重新运行,并返回一个新的值。如果依赖项没有变化,那么useMemo会返回上一次计算的值,从而避免不必要的计算。

需要注意的是,useMemo主要用于性能优化,并且只有在你能确定计算是昂贵的且结果可以安全地在渲染之间共享时才应该使用。

Vue中的computed

在Vue中,computed属性用于声明式地计算派生状态。当你有一个基于组件响应式数据计算出来的值,并且你希望这个值在响应式数据变化时自动更新时,computed是非常有用的。

computed属性可以是基于一个或多个响应式依赖的函数,这些依赖可以是组件的data属性、props或其他computed属性。当这些依赖发生变化时,computed属性会自动重新计算,并且Vue会确保它的值是最新的。

useMemo不同,computed在Vue中是声明式的,并且它总是会在依赖变化时重新计算,而不是基于性能优化的考虑。此外,computed属性还可以被用作模板中的绑定,并且它们具有缓存行为,这意味着如果依赖没有变化,那么computed属性的值也不会变化。

总结

  • useMemo(React):一个性能优化工具,用于避免不必要的昂贵计算。它返回一个记忆化的值,这个值在依赖项没有变化时保持不变。
  • computed(Vue):一个声明式的计算属性,用于基于响应式依赖计算派生状态。它总是会在依赖变化时重新计算,并且具有缓存行为。

React.momo

默认渲染:父组件渲染子组件一起渲染

momo:props不变化时,子组件跳过渲染

父组件重新渲染,正常数组会生成新的引用,如果缓存需要用useMemo

在React中,实际上并不存在名为“React.momo”的API或组件。可能您想要了解的是与“React.momo”名称相近或功能相似的React特性,比如React.memo。以下是对React.memo的详细介绍:

一、定义与用途

React.memo是一个高阶组件(Higher Order Component,简称HOC),它用于缓存组件的渲染结果,从而避免在props相同的情况下进行不必要的重新渲染。这有助于提高应用的性能,特别是在处理大型组件树或频繁更新的场景时。

二、使用方式

React.memo接受一个函数组件作为参数,并返回一个新的组件。这个新的组件会检查其props是否发生变化,如果没有变化,则不会重新渲染内部的函数组件。

import { memo } from 'react';  function MyComponent(props) {  // 组件代码  
}  export default memo(MyComponent);

三、深度比较与自定义比较函数

默认情况下,React.memo会对props进行浅比较(shallow comparison)。如果props中的对象或数组包含深层数据结构,并且这些深层数据发生了变化,但引用没有变化(即对象或数组的引用地址没有改变),那么React.memo可能不会触发重新渲染。

为了解决这个问题,可以向React.memo传递一个自定义的比较函数作为第二个参数。这个比较函数将用于确定何时应该重新渲染组件。

function arePropsEqual(prevProps, nextProps) {  // 自定义比较逻辑  // 例如,进行深度比较  return prevProps.someValue === nextProps.someValue;  
}  export default memo(MyComponent, arePropsEqual);

四、注意事项

  1. React.memo只能用于函数组件,不能用于类组件。
  2. 当使用React.memo时,应确保传递给组件的props是可比较的(例如,避免使用函数或undefined作为props的值,因为这些值在浅比较中可能无法准确判断)。
  3. 虽然React.memo可以提高性能,但过度使用也可能导致代码复杂性的增加。因此,应根据实际情况谨慎使用。

综上所述,React.memo是React中用于优化函数组件渲染性能的一个有用工具。通过缓存渲染结果和避免不必要的重新渲染,它可以帮助开发者提高应用的响应速度和用户体验。

useCallback

props传函数,保证子组件不重新渲染

useCallback是React提供的一个Hook函数,主要用于优化函数组件的性能,通过缓存回调函数避免不必要的重复创建和重新渲染。以下是对useCallback的详细解析:

一、基本用法

useCallback接受两个参数:一个回调函数和一个依赖数组。当依赖数组中的任何一个值发生变化时,useCallback会返回一个新的回调函数;否则,它会返回之前缓存的回调函数。

  • 回调函数:这是需要被缓存的函数,通常是在组件中需要多次调用的函数。
  • 依赖数组:这是一个包含依赖项的数组。当这些依赖项发生变化时,useCallback会重新创建一个新的回调函数。

二、示例代码

以下是一个简单的示例,展示了如何使用useCallback:

import React, { useCallback, useState } from 'react';  function MyComponent() {  const [count, setCount] = useState(0);  // 使用useCallback缓存回调函数  const handleClick = useCallback(() => {  console.log(`Clicked ${count} times`);  }, [count]);  return (  <>  <div>Count: {count}</div>  <button onClick={() => setCount(count + 1)}>Increment</button>  <button onClick={handleClick}>Click me</button>  </>  );  
}

在上面的代码中,handleClick回调函数依赖于count状态,因此每次count状态改变时,useCallback都会返回一个新的回调函数。

三、使用场景

useCallback通常用于以下场景:

  1. 将回调函数传递给子组件:当父组件将回调函数传递给子组件时,如果回调函数在每次父组件渲染时都重新创建,那么子组件可能会因为接收到新的函数引用而重新渲染。使用useCallback可以缓存回调函数,避免子组件的不必要重新渲染。
  2. 优化性能:在组件中频繁调用同一个回调函数时,使用useCallback可以避免每次调用都重新创建函数实例,从而提高性能。

四、注意事项

  1. 不要过度使用:虽然useCallback可以提高性能,但过度使用可能会导致代码变得复杂和难以维护。因此,应该根据实际需求合理使用。
  2. 依赖项要准确:在使用useCallback时,要确保依赖项数组中的值是准确的。如果遗漏了某个依赖项,可能会导致回调函数在依赖项变化时没有更新,从而引发bug。
  3. 与memo配合使用:useCallback通常与React.memo一起使用,以实现更高效的组件渲染。React.memo可以对组件的props进行浅层比较,如果props没有变化,则不会重新渲染组件。

五、性能优化讨论

关于useCallback的性能优化效果,存在一些不同的观点。一方面,使用useCallback可以避免不必要的函数重复创建和渲染,从而提高性能;另一方面,React的性能优化机制已经足够智能,可以自动处理很多情况下的函数重复创建。因此,在某些情况下,不使用useCallback也不会对性能产生显著影响。然而,在大型应用中或当回调函数被频繁调用时,使用useCallback仍然是一个值得考虑的优化手段。

综上所述,useCallback是React中一个非常有用的Hook函数,它可以帮助开发者优化函数组件的性能。通过合理使用useCallback和依赖项数组,可以避免不必要的函数重复创建和渲染,从而提高应用的性能和响应速度。

forwardRef

向父组件暴露DOM

React中的forwardRef是一个重要的API,它允许将ref自动地通过组件传递给其子组件。以下是对forwardRef的详细解析:

一、基本概念

forwardRef是React提供的一个高阶组件(HOC)或称为一个函数,用于解决在函数组件中无法直接使用ref的问题。在React中,refs通常用于访问DOM节点或组件实例,但在函数组件中,由于它们没有实例,因此无法直接使用ref。forwardRef允许我们将ref从父组件传递到子组件中的DOM元素或函数式组件。

二、工作原理

forwardRef的工作原理是接受一个渲染函数作为参数,该函数接收props和ref作为参数,并返回React元素。这样,父组件就可以通过ref属性将ref传递给被forwardRef包装的组件,而该组件则可以将这个ref转发给其内部的DOM元素或另一个组件。

三、使用场景

  1. 访问DOM元素:当需要从父组件直接访问子组件的DOM元素时,可以使用forwardRef。例如,当需要直接操作子组件的焦点、触发动画或测量子DOM节点的尺寸时,forwardRef非常有用。
  2. 高阶组件:在高阶组件中,经常需要将被包装的组件的ref传递给内部的某个子组件。这时,forwardRef可以确保ref能够正确地传递。
  3. 组件库开发:在设计可重用的组件库时,通常组件内部的实现细节是不暴露给使用者的。但有时外部需要对这些封装后的子组件进行操作,这时forwardRef可以提供一个简单而有效的解决方案。

四、示例代码

以下是一个使用forwardRef的示例代码:

import React, { forwardRef, useRef } from 'react';  // 定义一个使用forwardRef的组件  
const FancyButton = forwardRef((props, ref) => (  <button ref={ref} className="FancyButton">  {props.children}  </button>  
));  // 在父组件中使用FancyButton并传递ref  
const App = () => {  const buttonRef = useRef();  const handleClick = () => {  // 通过ref直接访问DOM元素并触发点击事件  buttonRef.current.click();  };  return (  <div>  <FancyButton ref={buttonRef}>Click me!</FancyButton>  <button onClick={handleClick}>Programmatically click FancyButton</button>  </div>  );  
};  export default App;

在上面的代码中,FancyButton组件使用了forwardRef来接收父组件传递的ref,并将其转发给内部的button元素。在父组件App中,通过useRef创建了一个ref,并将其传递给FancyButton组件。然后,通过ref直接访问了FancyButton组件内部的button元素,并触发了其点击事件。

五、注意事项

  1. 正确使用ref:在使用forwardRef时,需要确保将ref正确地传递给相应的子组件或DOM元素。否则,将无法访问到子组件的实例或DOM元素。
  2. 避免过度使用:虽然forwardRef提供了在函数组件中使用ref的能力,但过度使用可能会导致代码变得复杂和难以维护。因此,应该根据实际需求合理使用。
  3. 与类组件的区别:在类组件中,可以直接使用ref来访问组件实例。但在函数组件中,由于它们没有实例,因此需要使用forwardRef来间接访问DOM元素或子组件。

综上所述,forwardRef是React中一个非常有用的API,它允许在函数组件中通过ref访问子组件的DOM元素或实例。通过合理使用forwardRef,可以实现更精细化的UI控制和组件管理。

useImperativeHandle 

向外暴露方法

useImperativeHandle 是 React 中的一个 Hook,它允许你在使用 ref 时自定义暴露给父组件的实例值。以下是对 useImperativeHandle 的详细解析:

一、作用

useImperativeHandle 的主要作用是让子组件能够选择性地暴露给父组件某些属性或方法,而不是将所有属性和方法都暴露出去。这对于需要在父组件中调用子组件方法或访问子组件状态的场景非常有用。

二、使用场景

当父组件需要使用子组件的方法或属性时,可以通过 ref 和 useImperativeHandle 来实现。例如,父组件可能需要调用子组件的 focus 方法来聚焦输入框,或者访问子组件的某些状态。

三、使用步骤

  1. 父组件中创建 ref

    • 使用 useRef(函数组件)或 createRef(类组件)创建一个 ref 对象。
  2. 子组件中使用 forwardRef

    • 使用 React.forwardRef 包装子组件,以便能够接收和使用 ref。
  3. 子组件中使用 useImperativeHandle

    • 在子组件内部,使用 useImperativeHandle 钩子函数来定义要暴露给父组件的属性或方法。
    • useImperativeHandle 的第一个参数是 ref,第二个参数是一个函数,该函数返回一个对象,该对象包含要暴露给父组件的属性或方法。
  4. 父组件中通过 ref 访问子组件

    • 父组件可以通过 ref 的 current 属性来访问子组件暴露的属性或方法。

四、示例代码

以下是一个简单的示例,展示了如何使用 useImperativeHandle:

import React, { useRef, useImperativeHandle, forwardRef } from 'react';  // 子组件  
const FancyInput = React.forwardRef((props, ref) => {  const inputRef = useRef();  useImperativeHandle(ref, () => ({  focus: () => {  inputRef.current.focus();  }  }));  return <input ref={inputRef} type="text" />;  
});  // 父组件  
const App = () => {  const fancyInputRef = useRef();  return (  <div>  <FancyInput ref={fancyInputRef} />  <button onClick={() => fancyInputRef.current.focus()}>父组件调用子组件的 focus</button>  </div>  );  
};  export default App;

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/882264.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux——网络层协议

前言 网络层&#xff1a;在复杂的网络环境中确定一个合适的路径 目录 前言 一IP协议 1预备知识 2基本概念 3格式 4网段划分 4.1理解IP 4.2IP组成 4.3划分方式 4.4为什么要网段划分 5特殊的IP地址 6IP地址的限制 7私有IP和公网IP 8NAT技术 9理解公网 10路由 …

[MySQL课后作业]人事管理系统的SQL实践

1.假设某商业集团中有若干公司&#xff0c;人事数据库中有3个基本表 职工表:EMP(E#.ENAME,AGE, SEX, ECITY)。 其属性分别表示职工工号、姓名、年龄、性别和居住城市。 工作表:WORKS(E#,C#,SALARY)。其属性分别表示职工工号、所在公司的编号和工资。 公司表:COMP(C#,CANME,CITY…

【优选算法篇】踏入算法的深邃乐章:滑动窗口的极致探秘

文章目录 C 滑动窗口详解&#xff1a;进阶题解与思维分析前言第二章&#xff1a;进阶挑战2.1 水果成篮解法一&#xff1a;滑动窗口解法二&#xff1a;滑动窗口 数组模拟哈希表复杂度分析&#xff1a;图解分析&#xff1a;示例&#xff1a;滑动窗口执行过程图解&#xff1a; 详…

C for Graphic:径向模糊

最近要做一系列特效需求&#xff0c;顺便记录一下。 径向模糊&#xff08;也叫辐射模糊&#xff09;&#xff1a;一种由内向外发散的模糊的效果 原理&#xff1a;获取中心点&#xff08;centeruv&#xff09;到当前像素&#xff08;pixeluv&#xff09;的朝向法向…

RFC2616 超文本传输协议 HTTP/1.1

一、URL-俗称“网址” HTTP 使用 URL(Uniform Resource Locator&#xff0c;统一资源定位符)来定位资源&#xff0c;它是 URI(Uniform Resource Identifier&#xff0c;统一资源标识符)的子集&#xff0c;URL 在 URI 的基础上增加了定位能力 URI 除了包含 URL&#xff0c;还包…

车载实操:一对一实操学习、CANoe实操学习、推荐就业机会、就业技术支持、协助面试辅导

FOTA模块中OTA的知识点&#xff1a;1.测试过程中发现哪几类问题&#xff1f; 可能就是一个单键的ecu&#xff0c;比如升了一个门的ecu&#xff0c;他的升了之后就关不上&#xff0c;还有就是升级组合ecu的时候&#xff0c;c屏上不显示进度条。 2.在做ota测试的过程中&#xff…

5G NR:UE初始接入信令流程浅介

UE初始接入信令流程 流程说明 用户设备&#xff08;UE&#xff09;向gNB-DU发送RRCSetupRequest消息。gNB-DU 包含 RRC 消息&#xff0c;如果 UE 被接纳&#xff0c;则在 INITIAL UL RRC MESSAGE TRANSFER 消息中包括为 UE 分配的低层配置&#xff0c;并将其传输到 gNB-CU。IN…

PFC和LLC的本质和为什么要用PFC和LLC电路原因

我们可以用电感和电容的特性,以及电压和电流之间的不同步原理来解释PFC(功率因数校正)和LLC(谐振变换器)。 电感和电容的基本概念 电感(Inductor): 电感是一种储存电能的组件。它的电流变化比较慢,电流在电感中延迟,而电压变化得比较快。可以把电感想象成一个“滞后…

『Mysql集群』Mysql高可用集群之主从复制 (一)

Mysql主从复制模式 主从复制有一主一从、主主复制、一主多从、多主一从等多种模式. 我们可以根据它们的优缺点选择适合自身企业情况的主从复制模式进行搭建 . 一主一从 主主复制 (互为主从模式): 实现Mysql多活部署 一主多从: 提高整个集群的读能力 多主一从: 提高整个集群的…

transformers 推理 Qwen2.5 等大模型技术细节详解(一)transformers 初始化和对象加载(文末免费送书)

上周收到一位网友的私信&#xff0c;希望老牛同学写一篇有关使用 transformers 框架推理大模型的技术细节的文章。 老牛同学刚开始以为这类的文章网上应该会有很多&#xff0c;于是想着百度几篇质量稍高一点的回复这位网友。结果&#xff0c;老牛同学搜索后发现&#xff0c;类…

信息与计算科学:“数学 + 计算机”,奏响未来科技新乐章

在当今科技飞速发展的时代&#xff0c;有一个专业如同一颗闪耀的新星&#xff0c;散发着独特的魅力&#xff0c;那就是信息与计算科学专业。 一、专业全貌&#xff1a;追根溯源&#xff0c;领略交叉之美 &#xff08;一&#xff09;专业的诞生与发展 1998 年&#xff0c;教育…

一图解千言,了解常见的流程图类型及其作用

在企业管理、软件研发过程中&#xff0c;经常会需要进行各种业务流程梳理&#xff0c;而流程图就是梳理业务时必要的手段&#xff0c;同时也是梳理的产出。但在不同的情况下适用的流程图又不尽相同。 本文我们就一起来总结一下8 种最常见的流程图类型 数据流程图 数据流程图&…

RHCE——例行性工作

准备工作 [rootlocalhost ~]# cat /etc/yum.repos.d/aliyun.repo [ali-app] nameali-app baseurlhttps://mirrors.aliyun.com/centos-stream/9-stream/AppStream/x86_64/os/ gpgcheck0[ali-base] nameali-base baseurlhttps://mirrors.aliyun.com/centos-stream/9-stream/Base…

JS | JS中类的 prototype 属性和__proto__属性

大多数浏览器的 ES5 实现之中&#xff0c;每一个对象都有__proto__属性&#xff0c;指向对应的构造函数的prototype属性。Class 作为构造函数的语法糖&#xff0c;同时有prototype属性和__proto__属性&#xff0c;因此同时存在两条继承链。 构造函数的子类有prototype属性。‌ …

倍福中控显示屏维修控制面板CP7732-1207-0030

使用的环境条件不当可能会损坏设备。 保护设备&#xff0c;防止灰尘、湿气和热量进入。 使用注意事项&#xff1a; 空气流通不畅 设备安装不正确会阻碍设备内的空气流通&#xff0c;从而导致过热和功能受损。 只能按所示方向将设备安装在相应的壁上。 该设备设计用于安装在…

05 P1157 组合的输出

题目&#xff1a; 代码&#xff1a; #include<iostream> using namespace std; # define M 500 #include<algorithm>int sa[100005],k,n,count1;bool func(int n) {int mark0;if(n1){return 1;}else{for(int i2;i<n-1;i){if(n%i0){mark1;return 0;}}if(mark0)r…

强化学习案例:美团是如何在推荐系统中落地强化学习

目录 美团的强化学习应用场景和分析 场景举例 使用原因 强化学习的六大要素 智能体 环境 行动 奖励 目标 状态 美团强化学习模型设计 美团强化学习工程落地 总体的数据结构关系图 实现步骤 1. 日志收集与实时处理&#xff08;Log Collector, Online Joiner&…

PyTorch 2.5 发布带来一些新特性和改进

官网&#xff1a;https://github.com/pytorch/pytorchGitHub&#xff1a;https://github.com/pytorch/pytorch原文&#xff1a;https://github.com/pytorch/pytorch/releases/tag/v2.5.0 主要亮点 (Highlights)] SDPA CuDNN 后端&#xff1a;为 torch.nn.functional.scaled_d…

C++标准模板库--vector

vector 介绍 vector&#xff08;向量&#xff09;是一种序列容器&#xff0c;表示为可以改变大小的数组。vector中的元素使用连续的存储位置&#xff0c;这意味着也可以使用指向其元素的常规指针偏移量来访问任意元素&#xff0c;且与数组一样高效。但与数组不同的是&#xff…

React Componet类组件详解(老项目)

React类组件是通过创建class继承React.Component来创建的&#xff0c;是React中用于构建用户界面的重要部分。以下是对React类组件的详细解释&#xff1a; 一、定义与基本结构 类组件使用ES6的class语法定义&#xff0c;并继承自React.Component。它们具有更复杂的功能&#…