react面试题总结一波,以备不时之需
创始人
2024-03-23 18:07:53

React组件的构造函数有什么作用?它是必须的吗?

构造函数主要用于两个目的:

  • 通过将对象分配给this.state来初始化本地状态
  • 将事件处理程序方法绑定到实例上

所以,当在React class中需要设置state的初始值或者绑定事件时,需要加上构造函数,官方Demo:

class LikeButton extends React.Component {constructor() {super();this.state = {liked: false};this.handleClick = this.handleClick.bind(this);}handleClick() {this.setState({liked: !this.state.liked});}render() {const text = this.state.liked ? 'liked' : 'haven\'t liked';return (
this.handleClick}>You {text} this. Click to toggle.
);} } ReactDOM.render(,document.getElementById('example') );

构造函数用来新建父类的this对象;子类必须在constructor方法中调用super方法;否则新建实例时会报错;因为子类没有自己的this对象,而是继承父类的this对象,然后对其进行加工。如果不调用super方法;子类就得不到this对象。

注意:

  • constructor () 必须配上 super(), 如果要在constructor 内部使用 this.props 就要 传入props , 否则不用
  • JavaScript中的 bind 每次都会返回一个新的函数, 为了性能等考虑, 尽量在constructor中绑定事件

除了在构造函数中绑定 this,还有其它方式吗

你可以使用属性初始值设定项(property initializers)来正确绑定回调,create-react-app 也是默认支持的。在回调中你可以使用箭头函数,但问题是每次组件渲染时都会创建一个新的回调。

什么原因会促使你脱离 create-react-app 的依赖

当你想去配置 webpack 或 babel presets。

何为 action

Actions 是一个纯 javascript 对象,它们必须有一个 type 属性表明正在执行的 action 的类型。实质上,action 是将数据从应用程序发送到 store 的有效载荷。

diff算法如何比较?

  • 只对同级比较,跨层级的dom不会进行复用
  • 不同类型节点生成的dom树不同,此时会直接销毁老节点及子孙节点,并新建节点
  • 可以通过key来对元素diff的过程提供复用的线索
  • 单节点diff
  • 单点diff有如下几种情况:
  • key和type相同表示可以复用节点
  • key不同直接标记删除节点,然后新建节点
  • key相同type不同,标记删除该节点和兄弟节点,然后新创建节点

组件通信的方式有哪些

  • ⽗组件向⼦组件通讯: ⽗组件可以向⼦组件通过传 props 的⽅式,向⼦组件进⾏通讯
  • ⼦组件向⽗组件通讯: props+回调的⽅式,⽗组件向⼦组件传递props进⾏通讯,此props为作⽤域为⽗组件⾃身的函 数,⼦组件调⽤该函数,将⼦组件想要传递的信息,作为参数,传递到⽗组件的作⽤域中
  • 兄弟组件通信: 找到这两个兄弟节点共同的⽗节点,结合上⾯两种⽅式由⽗节点转发信息进⾏通信
  • 跨层级通信: Context 设计⽬的是为了共享那些对于⼀个组件树⽽⾔是“全局”的数据,例如当前认证的⽤户、主题或⾸选语⾔,对于跨越多层的全局数据通过 Context 通信再适合不过
  • 发布订阅模式: 发布者发布事件,订阅者监听事件并做出反应,我们可以通过引⼊event模块进⾏通信
  • 全局状态管理⼯具: 借助Redux或者Mobx等全局状态管理⼯具进⾏通信,这种⼯具会维护⼀个全局状态中⼼Store,并根据不同的事件产⽣新的状态

参考 前端进阶面试题详细解答

什么是受控组件和非受控组件

  • 受控组件:

    没有维持自己的状态

    数据由付组件控制

    通过props获取当前值,然后通过回调函数通知更改

  • 非受控组件

    保持这个自己的状态

    数据有DOM控制

    refs用于获取其当前值

React的虚拟DOM和Diff算法的内部实现

传统 diff 算法的时间复杂度是 O(n^3),这在前端 render 中是不可接受的。为了降低时间复杂度,react 的 diff 算法做了一些妥协,放弃了最优解,最终将时间复杂度降低到了 O(n)。

那么 react diff 算法做了哪些妥协呢?,参考如下:

  1. tree diff:只对比同一层的 dom 节点,忽略 dom 节点的跨层级移动

如下图,react 只会对相同颜色方框内的 DOM 节点进行比较,即同一个父节点下的所有子节点。当发现节点不存在时,则该节点及其子节点会被完全删除掉,不会用于进一步的比较。

这样只需要对树进行一次遍历,便能完成整个 DOM 树的比较。

image-20210302195610674

这就意味着,如果 dom 节点发生了跨层级移动,react 会删除旧的节点,生成新的节点,而不会复用。

  1. component diff:如果不是同一类型的组件,会删除旧的组件,创建新的组件

image-20210302195654736

  1. element diff:对于同一层级的一组子节点,需要通过唯一 id 进行来区分
  • 如果没有 id 来进行区分,一旦有插入动作,会导致插入位置之后的列表全部重新渲染
  • 这也是为什么渲染列表时为什么要使用唯一的 key。

React如何获取组件对应的DOM元素?

可以用ref来获取某个子节点的实例,然后通过当前class组件实例的一些特定属性来直接获取子节点实例。ref有三种实现方法:

  • 字符串格式:字符串格式,这是React16版本之前用得最多的,例如:

    span

  • 函数格式:ref对应一个方法,该方法有一个参数,也就是对应的节点实例,例如:

    this.info = ele}>

  • createRef方法:React 16提供的一个API,使用React.createRef()来实现

如何配置 React-Router 实现路由切换

(1)使用 组件

路由匹配是通过比较 的 path 属性和当前地址的 pathname 来实现的。当一个 匹配成功时,它将渲染其内容,当它不匹配时就会渲染 null。没有路径的 将始终被匹配。

// when location = { pathname: '/about' }
About}/> // renders 
Contact}/> // renders null
Always}/> // renders 

(2)结合使用 组件和 组件

用于将 分组。

Home} />About} />Contact} />

不是分组 所必须的,但他通常很有用。 一个 会遍历其所有的子 元素,并仅渲染与当前地址匹配的第一个元素。

(3)使用 组件

组件来在你的应用程序中创建链接。无论你在何处渲染一个 ,都会在应用程序的 HTML 中渲染锚()。

Home   
// Home

是一种特殊类型的 当它的 to属性与当前地址匹配时,可以将其定义为"活跃的"。

// location = { pathname: '/react' }
React

// React

当我们想强制导航时,可以渲染一个,当一个渲染时,它将使用它的to属性进行定向。

Redux Thunk 的作用是什么

Redux thunk 是一个允许你编写返回一个函数而不是一个 action 的 actions creators 的中间件。如果满足某个条件,thunk 则可以用来延迟 action 的派发(dispatch),这可以处理异步 action 的派发(dispatch)。

React实现的移动应用中,如果出现卡顿,有哪些可以考虑的优化方案

  • 增加shouldComponentUpdate钩子对新旧props进行比较,如果值相同则阻止更新,避免不必要的渲染,或者使用PureReactComponent替代Component,其内部已经封装了shouldComponentUpdate的浅比较逻辑
  • 对于列表或其他结构相同的节点,为其中的每一项增加唯一key属性,以方便Reactdiff算法中对该节点的复用,减少节点的创建和删除操作
  • render函数中减少类似onClick={() => {doSomething()}}的写法,每次调用render函数时均会创建一个新的函数,即使内容没有发生任何变化,也会导致节点没必要的重渲染,建议将函数保存在组件的成员对象中,这样只会创建一次
  • 组件的props如果需要经过一系列运算后才能拿到最终结果,则可以考虑使用reselect库对结果进行缓存,如果props值未发生变化,则结果直接从缓存中拿,避免高昂的运算代价
  • webpack-bundle-analyzer分析当前页面的依赖包,是否存在不合理性,如果存在,找到优化点并进行优化

Diff 的瓶颈以及 React 的应对

由于 diff 操作本身会带来性能上的损耗,在 React 文档中提到过,即使最先进的算法中,将前后两棵树完全比对的算法复杂度为O(n3),其中 n 为树中元素的数量。

如果 React 使用了该算法,那么仅仅一千个元素的页面所需要执行的计算量就是十亿的量级,这无疑是无法接受的。

为了降低算法的复杂度,React 的 diff 会预设三个限制:

  1. 只对同级元素进行 diff 比对。如果一个元素节点在前后两次更新中跨越了层级,那么 React 不会尝试复用它
  2. 两个不同类型的元素会产生出不同的树。如果元素由 div 变成 p,React 会销毁 div 及其子孙节点,并新建 p 及其子孙节点
  3. 开发者可以通过 key 来暗示哪些子元素在不同的渲染下能保持稳定

fetch封装

npm install whatwg-fetch --save  // 适配其他浏览器
npm install es6-promiseexport const handleResponse = (response) => {if (response.status === 403 || response.status === 401) {const oauthurl = response.headers.get('locationUrl');if (!_.isEmpty(oauthUrl)) {window.location.href = oauthurl;return;}}if (!response.ok) {return getErrorMessage(response).then(errorMessage => apiError(response.status, errorMessage));}if (isJson(response)) {return response.json();}if (isText(response)) {return response.text();}return response.blob();
};const httpRequest = {request: ({method, headers, body, path, query,}) => {const options = {};let url = path;if (method) {options.method = method;}if (headers) {options.headers = {...options.headers,...headers};}if (body) {options.body = body;}if (query) {const params = Object.keys(query).map(k => `${k}=${query[k]}`).join('&');url = url.concat(`?${params}`);}return fetch(url, Object.assign({}, options, { credentials: 'same-origin' })).then(handleResponse);},
};export default httpRequest;

什么是上下文Context

Context 通过组件树提供了一个传递数据的方法,从而避免了在每一个层级手动的传递 props 属性。

  • 用法:在父组件上定义getChildContext方法,返回一个对象,然后它的子组件就可以通过this.context属性来获取
import React,{Component} from 'react';
import ReactDOM from 'react-dom';
import PropTypes from 'prop-types';
class Header extends Component{render() {return (
</div>)} } class Title extends Component{<!-- -->static contextTypes={<!-- -->color:PropTypes.string}render() {<!-- -->return (<div style={<!-- -->{<!-- -->color:this.context.color}}>Title</div>)} } class Main extends Component{<!-- -->render() {<!-- -->return (<div><Content></Content></div>)} } class Content extends Component{<!-- -->static contextTypes={<!-- -->color: PropTypes.string,changeColor:PropTypes.func}render() {<!-- -->return (<div style={<!-- -->{<!-- -->color:this.context.color}}>Content<button onClick={<!-- -->()=>this.context.changeColor('green')}>绿色</button><button onClick={<!-- -->()=>this.context.changeColor('orange')}>橙色</button></div>)} } class Page extends Component{<!-- -->constructor() {<!-- -->super();this.state={<!-- -->color:'red'};}static childContextTypes={<!-- -->color: PropTypes.string,changeColor:PropTypes.func}getChildContext() {<!-- -->return {<!-- -->color: this.state.color,changeColor:(color)=>{<!-- -->this.setState({<!-- -->color})}}}render() {<!-- -->return (<div><Header/><Main/></div>)} } ReactDOM.render(<Page/>,document.querySelector('#root')); </code></pre> <h3>何为 <code>Children</code></h3> <p>在JSX表达式中,一个开始标签(比如<code><a></code>)和一个关闭标签(比如<code></a></code>)之间的内容会作为一个特殊的属性<code>props.children</code>被自动传递给包含着它的组件。</p> <p>这个属性有许多可用的方法,包括 <code>React.Children.map</code>,<code>React.Children.forEach</code>, <code>React.Children.count</code>, <code>React.Children.only</code>,<code>React.Children.toArray</code>。</p> <h2>componentWillReceiveProps调用时机</h2> <ul><li>已经被废弃掉</li><li>当props改变的时候才调用,子组件第二次接收到props的时候</li></ul> <h2>React 性能优化</h2> <ul><li>shouldCompoentUpdate</li><li>pureComponent 自带shouldCompoentUpdate的浅比较优化</li><li>结合Immutable.js达到最优</li></ul> <h2>说说你用react有什么坑点?</h2> <p><strong>1. JSX做表达式判断时候,需要强转为boolean类型</strong></p> <blockquote> <p>如果不使用 <code>!!b</code> 进行强转数据类型,会在页面里面输出 <code>0</code>。</p> </blockquote> <pre><code class="prism language-javascriptx">render() {const b = 0;return <div>{!!b && <div>这是一段文本</div>}</div> } </code></pre> <p><strong>2. 尽量不要在 <code>componentWillReviceProps</code> 里使用 setState,如果一定要使用,那么需要判断结束条件,不然会出现无限重渲染,导致页面崩溃</strong></p> <p><strong>3. 给组件添加ref时候,尽量不要使用匿名函数,因为当组件更新的时候,匿名函数会被当做新的prop处理,让ref属性接受到新函数的时候,react内部会先清空ref,也就是会以null为回调参数先执行一次ref这个props,然后在以该组件的实例执行一次ref,所以用匿名函数做ref的时候,有的时候去ref赋值后的属性会取到null</strong></p> <p><strong>4. 遍历子节点的时候,不要用 index 作为组件的 key 进行传入</strong></p> <h3>React Hooks 解决了哪些问题?</h3> <p>React Hooks 主要解决了以下问题:</p> <p><strong>(1)在组件之间复用状态逻辑很难</strong></p> <p>React 没有提供将可复用性行为“附加”到组件的途径(例如,把组件连接到 store)解决此类问题可以使用 render props 和 高阶组件。但是这类方案需要重新组织组件结构,这可能会很麻烦,并且会使代码难以理解。由 providers,consumers,高阶组件,render props 等其他抽象层组成的组件会形成“嵌套地狱”。尽管可以在 DevTools 过滤掉它们,但这说明了一个更深层次的问题:React 需要为共享状态逻辑提供更好的原生途径。</p> <p>可以使用 Hook 从组件中提取状态逻辑,使得这些逻辑可以单独测试并复用。Hook 使我们在无需修改组件结构的情况下复用状态逻辑。 这使得在组件间或社区内共享 Hook 变得更便捷。</p> <p><strong>(2)复杂组件变得难以理解</strong></p> <p>在组件中,每个生命周期常常包含一些不相关的逻辑。例如,组件常常在 componentDidMount 和 componentDidUpdate 中获取数据。但是,同一个 componentDidMount 中可能也包含很多其它的逻辑,如设置事件监听,而之后需在 componentWillUnmount 中清除。相互关联且需要对照修改的代码被进行了拆分,而完全不相关的代码却在同一个方法中组合在一起。如此很容易产生 bug,并且导致逻辑不一致。</p> <p>在多数情况下,不可能将组件拆分为更小的粒度,因为状态逻辑无处不在。这也给测试带来了一定挑战。同时,这也是很多人将 React 与状态管理库结合使用的原因之一。但是,这往往会引入了很多抽象概念,需要你在不同的文件之间来回切换,使得复用变得更加困难。</p> <p>为了解决这个问题,Hook 将组件中相互关联的部分拆分成更小的函数(比如设置订阅或请求数据),而并非强制按照生命周期划分。你还可以使用 reducer 来管理组件的内部状态,使其更加可预测。</p> <p><strong>(3)难以理解的 class</strong></p> <p>除了代码复用和代码管理会遇到困难外,class 是学习 React 的一大屏障。我们必须去理解 JavaScript 中 this 的工作方式,这与其他语言存在巨大差异。还不能忘记绑定事件处理器。没有稳定的语法提案,这些代码非常冗余。大家可以很好地理解 props,state 和自顶向下的数据流,但对 class 却一筹莫展。即便在有经验的 React 开发者之间,对于函数组件与 class 组件的差异也存在分歧,甚至还要区分两种组件的使用场景。</p> <p>为了解决这些问题,Hook 使你在非 class 的情况下可以使用更多的 React 特性。 从概念上讲,React 组件一直更像是函数。而 Hook 则拥抱了函数,同时也没有牺牲 React 的精神原则。Hook 提供了问题的解决方案,无需学习复杂的函数式或响应式编程技术</p><link href="https://csdnimg.cn/release/blogv2/dist/mdeditor/css/editerView/markdown_views-22a2fefd3b.css" rel="stylesheet"><link href="https://csdnimg.cn/release/blogv2/dist/mdeditor/css/style-4f8fbf9108.css" rel="stylesheet"> <!--end::Text--> </div> <!--end::Description--> <div class="mt-5"> <!--关键词搜索--> <a href="/index.php?s=news&c=search&keyword=%E8%AF%8D%E5%BA%93%E5%8A%A0%E8%BD%BD%E9%94%99%E8%AF%AF%3A%E6%9C%AA%E8%83%BD%E6%89%BE%E5%88%B0%E6%96%87%E4%BB%B6%E2%80%9CE%3A%5Chighferrum_mysql%5CConfiguration%5CDict_Stopwords.txt%E2%80%9D%E3%80%82" class="badge badge-light-primary fw-bold my-2" target="_blank">词库加载错误:未能找到文件“E:\highferrum_mysql\Configuration\Dict_Stopwords.txt”。</a> </div> <div class="mt-5"> <p class="fc-show-prev-next"> <strong>上一篇:</strong><a href="/life/3418540.html">程序人生——css绘制世界杯足球场</a><br> </p> <p class="fc-show-prev-next"> <strong>下一篇:</strong><a href="/life/3418545.html">UE5笔记【五】操作细节——光源、光线参数配置、光照图修复</a> </p> </div> <!--begin::Block--> <div class="d-flex flex-stack mb-2 mt-10"> <!--begin::Title--> <h3 class="text-dark fs-5 fw-bold text-gray-800">相关内容</h3> <!--end::Title--> </div> <div class="separator separator-dashed mb-9"></div> <!--end::Block--> <div class="row g-10"> </div> </div> <!--end::Table widget 14--> </div> <!--end::Col--> <!--begin::Col--> <div class="col-xl-4 mt-0"> <!--begin::Chart Widget 35--> <div class="card card-flush h-md-100"> <!--begin::Header--> <div class="card-header pt-5 "> <!--begin::Title--> <h3 class="card-title align-items-start flex-column"> <!--begin::Statistics--> <div class="d-flex align-items-center mb-2"> <!--begin::Currency--> <span class="fs-5 fw-bold text-gray-800 ">热门资讯</span> <!--end::Currency--> </div> <!--end::Statistics--> </h3> <!--end::Title--> </div> <!--end::Header--> <!--begin::Body--> <div class="card-body pt-3"> <!--begin::Item--> <div class="d-flex flex-stack mb-7"> <!--begin::Symbol--> <div class="symbol symbol-60px symbol-2by3 me-4"> <div class="symbol-label" style="background-image: url('https://p3.toutiaoimg.com/origin/tos-cn-i-qvj2lq49k0/b04fefed77ad422aa38dc6e704dd1823?from=pc')"></div> </div> <!--end::Symbol--> <!--begin::Title--> <div class="m-0"> <a href="/changshi/4433197.html" class="text-dark fw-bold text-hover-primary fs-6">我喜欢你韩语怎么说 sikid...</a> <span class="text-gray-600 fw-semibold d-block pt-1 fs-7"></span> </div> <!--end::Title--> </div> <!--begin::Item--> <div class="d-flex flex-stack mb-7"> <!--begin::Symbol--> <div class="symbol symbol-60px symbol-2by3 me-4"> <div class="symbol-label" style="background-image: url('https://p3-tt.byteimg.com/origin/pgc-image/9ca1693124864c45947909a1590293a1?from=pc')"></div> </div> <!--end::Symbol--> <!--begin::Title--> <div class="m-0"> <a href="/changshi/4433196.html" class="text-dark fw-bold text-hover-primary fs-6">埃菲尔铁塔在哪 中国仿建埃菲尔...</a> <span class="text-gray-600 fw-semibold d-block pt-1 fs-7">2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...</span> </div> <!--end::Title--> </div> <!--begin::Item--> <div class="d-flex flex-stack mb-7"> <!--begin::Symbol--> <div class="symbol symbol-60px symbol-2by3 me-4"> <div class="symbol-label" style="background-image: url('https://p3.toutiaoimg.com/origin/tos-cn-i-qvj2lq49k0/002f770423f6444da282785960702fa7?from=pc')"></div> </div> <!--end::Symbol--> <!--begin::Title--> <div class="m-0"> <a href="/changshi/4433195.html" class="text-dark fw-bold text-hover-primary fs-6">北京的名胜古迹 北京最著名的景...</a> <span class="text-gray-600 fw-semibold d-block pt-1 fs-7">北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...</span> </div> <!--end::Title--> </div> <!--begin::Item--> <div class="d-flex flex-stack mb-7"> <!--begin::Symbol--> <div class="symbol symbol-60px symbol-2by3 me-4"> <div class="symbol-label" style="background-image: url('https://p1-tt.byteimg.com/origin/pgc-image/8f50304f5bc04b2aa216387809669921?from=pc')"></div> </div> <!--end::Symbol--> <!--begin::Title--> <div class="m-0"> <a href="/changshi/4433194.html" class="text-dark fw-bold text-hover-primary fs-6">苗族的传统节日 贵州苗族节日有...</a> <span class="text-gray-600 fw-semibold d-block pt-1 fs-7">【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...</span> </div> <!--end::Title--> </div> <!--begin::Item--> <div class="d-flex flex-stack mb-7"> <!--begin::Symbol--> <div class="symbol symbol-60px symbol-2by3 me-4"> <div class="symbol-label" style="background-image: url('https://p3.toutiaoimg.com/origin/pgc-image/5d7b1f820a4b403aa136bac748c8be9f?from=pc')"></div> </div> <!--end::Symbol--> <!--begin::Title--> <div class="m-0"> <a href="/changshi/4433193.html" class="text-dark fw-bold text-hover-primary fs-6">长白山自助游攻略 吉林长白山游...</a> <span class="text-gray-600 fw-semibold d-block pt-1 fs-7">昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...</span> </div> <!--end::Title--> </div> <!--begin::Item--> <div class="d-flex flex-stack mb-7"> <!--begin::Symbol--> <div class="symbol symbol-60px symbol-2by3 me-4"> <div class="symbol-label" style="background-image: url('https://p6.toutiaoimg.com/origin/tos-cn-i-qvj2lq49k0/0be6682557a84445b7ee741d4acdf41f?from=pc')"></div> </div> <!--end::Symbol--> <!--begin::Title--> <div class="m-0"> <a href="/changshi/4433192.html" class="text-dark fw-bold text-hover-primary fs-6">世界上最漂亮的人 世界上最漂亮...</a> <span class="text-gray-600 fw-semibold d-block pt-1 fs-7">此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...</span> </div> <!--end::Title--> </div> <!--begin::Item--> <div class="d-flex flex-stack mb-7"> <!--begin::Symbol--> <div class="symbol symbol-60px symbol-2by3 me-4"> <div class="symbol-label" style="background-image: url('https://p3.toutiaoimg.com/origin/pgc-image/28853d21814f40fdbfae24b645065016?from=pc')"></div> </div> <!--end::Symbol--> <!--begin::Title--> <div class="m-0"> <a href="/changshi/4433191.html" class="text-dark fw-bold text-hover-primary fs-6">猫咪吃了塑料袋怎么办 猫咪误食...</a> <span class="text-gray-600 fw-semibold d-block pt-1 fs-7">你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...</span> </div> <!--end::Title--> </div> <!--begin::Item--> <div class="d-flex flex-stack mb-7"> <!--begin::Symbol--> <div class="symbol symbol-60px symbol-2by3 me-4"> <div class="symbol-label" style="background-image: url('https://p26.toutiaoimg.com/origin/pgc-image/e2ed2b3a08484bf1be3e029f3cd7d763?from=pc')"></div> </div> <!--end::Symbol--> <!--begin::Title--> <div class="m-0"> <a href="/changshi/4433190.html" class="text-dark fw-bold text-hover-primary fs-6">应用未安装解决办法 平板应用未...</a> <span class="text-gray-600 fw-semibold d-block pt-1 fs-7">---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...</span> </div> <!--end::Title--> </div> <!--begin::Item--> <div class="d-flex flex-stack mb-7"> <!--begin::Symbol--> <div class="symbol symbol-60px symbol-2by3 me-4"> <div class="symbol-label" style="background-image: url('https://p26.toutiaoimg.com/origin/pgc-image/4e1206de96d54744b5a8a2ce8f019cd1?from=pc')"></div> </div> <!--end::Symbol--> <!--begin::Title--> <div class="m-0"> <a href="/changshi/4433189.html" class="text-dark fw-bold text-hover-primary fs-6">脚上的穴位图 脚面经络图对应的...</a> <span class="text-gray-600 fw-semibold d-block pt-1 fs-7">人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...</span> </div> <!--end::Title--> </div> <!--begin::Item--> <div class="d-flex flex-stack mb-7"> <!--begin::Symbol--> <div class="symbol symbol-60px symbol-2by3 me-4"> <div class="symbol-label" style="background-image: url('https://p26.toutiaoimg.com/origin/tos-cn-i-tjoges91tu/T8A8f1S2VXqbx4?from=pc')"></div> </div> <!--end::Symbol--> <!--begin::Title--> <div class="m-0"> <a href="/changshi/4433188.html" class="text-dark fw-bold text-hover-primary fs-6">demo什么意思 demo版本...</a> <span class="text-gray-600 fw-semibold d-block pt-1 fs-7">618快到了,各位的小金库大概也在准备开闸放水了吧。没有小金库的,也该向老婆撒娇卖萌服个软了,一切只...</span> </div> <!--end::Title--> </div> <!--begin::Item--> <div class="d-flex flex-stack mb-7"> <!--begin::Symbol--> <div class="symbol symbol-60px symbol-2by3 me-4"> <div class="symbol-label" style="background-image: url('https://p3.toutiaoimg.com/origin/tos-cn-i-qvj2lq49k0/b04fefed77ad422aa38dc6e704dd1823?from=pc')"></div> </div> <!--end::Symbol--> <!--begin::Title--> <div class="m-0"> <a href="/changshi/4433187.html" class="text-dark fw-bold text-hover-primary fs-6">我喜欢你韩语怎么说 sikid...</a> <span class="text-gray-600 fw-semibold d-block pt-1 fs-7"></span> </div> <!--end::Title--> </div> <!--begin::Item--> <div class="d-flex flex-stack mb-7"> <!--begin::Symbol--> <div class="symbol symbol-60px symbol-2by3 me-4"> <div class="symbol-label" style="background-image: url('https://p3-tt.byteimg.com/origin/pgc-image/9ca1693124864c45947909a1590293a1?from=pc')"></div> </div> <!--end::Symbol--> <!--begin::Title--> <div class="m-0"> <a href="/changshi/4433186.html" class="text-dark fw-bold text-hover-primary fs-6">埃菲尔铁塔在哪 中国仿建埃菲尔...</a> <span class="text-gray-600 fw-semibold d-block pt-1 fs-7">2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...</span> </div> <!--end::Title--> </div> <!--begin::Item--> <div class="d-flex flex-stack mb-7"> <!--begin::Symbol--> <div class="symbol symbol-60px symbol-2by3 me-4"> <div class="symbol-label" style="background-image: url('https://p3.toutiaoimg.com/origin/tos-cn-i-qvj2lq49k0/002f770423f6444da282785960702fa7?from=pc')"></div> </div> <!--end::Symbol--> <!--begin::Title--> <div class="m-0"> <a href="/changshi/4433185.html" class="text-dark fw-bold text-hover-primary fs-6">北京的名胜古迹 北京最著名的景...</a> <span class="text-gray-600 fw-semibold d-block pt-1 fs-7">北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...</span> </div> <!--end::Title--> </div> <!--begin::Item--> <div class="d-flex flex-stack mb-7"> <!--begin::Symbol--> <div class="symbol symbol-60px symbol-2by3 me-4"> <div class="symbol-label" style="background-image: url('https://p1-tt.byteimg.com/origin/pgc-image/8f50304f5bc04b2aa216387809669921?from=pc')"></div> </div> <!--end::Symbol--> <!--begin::Title--> <div class="m-0"> <a href="/changshi/4433184.html" class="text-dark fw-bold text-hover-primary fs-6">苗族的传统节日 贵州苗族节日有...</a> <span class="text-gray-600 fw-semibold d-block pt-1 fs-7">【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...</span> </div> <!--end::Title--> </div> <!--begin::Item--> <div class="d-flex flex-stack mb-7"> <!--begin::Symbol--> <div class="symbol symbol-60px symbol-2by3 me-4"> <div class="symbol-label" style="background-image: url('https://p3.toutiaoimg.com/origin/pgc-image/5d7b1f820a4b403aa136bac748c8be9f?from=pc')"></div> </div> <!--end::Symbol--> <!--begin::Title--> <div class="m-0"> <a href="/changshi/4433183.html" class="text-dark fw-bold text-hover-primary fs-6">长白山自助游攻略 吉林长白山游...</a> <span class="text-gray-600 fw-semibold d-block pt-1 fs-7">昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...</span> </div> <!--end::Title--> </div> </div> <!--end::Body--> </div> <!--end::Chart Widget 35--> </div> <!--end::Col--> </div> </div> <!--end::Content container--> </div> <!--end::Content--> </div> <!--end::Content wrapper--> <!--begin::Footer--> <div id="kt_app_footer" class="app-footer"> <!--begin::Footer container--> <div class="app-container container-xxl d-flex flex-column flex-md-row flex-center flex-md-stack py-3"> <!--begin::Copyright--> <div class="text-dark order-2 order-md-1"> <span class="text-muted fw-semibold me-1">2026 ©</span> 办公百科网<a href="http://fund.caiding5.cn/">才丁消费网</a><a href="http://www.zzldhg.com/">零点化工网</a><a href="http://www.hcygmm.com/">汇川网</a><a href="http://learn.office369.com">学习</a><a href="http://www.zzdfzj.cn/">东方游戏</a><a href="http://share.office369.com">办公分享</a><div style="display:none"><a href="http://www.80hlw.com">八零互联网</a> <a href="http://ask.kcwzh.com">开创问答网</a> <a href="http://www.office369.com">办公应用网</a><a href="https://www.mingxing100.com">明星一百</a><a href="http://tousu.huashangw.com">商务投诉网</a></div><a href="https://www.bitekongjian.com/">比特空间</a><a href="http://lishi.fadeduo.com/">历史</a><a href="http://tiyu.fadeduo.com/">体育</a><a href="http://tansuo.caiding5.cn/">财丁</a><a href="http://che.yuansudz.com/">元素汽车</a><a href="http://cn.yuansudz.com/">元素科技</a><a href="http://www.kthtea.cn/">太和茶叶网</a><a href="http://cn.yexian114.com/">野仙生活网</a> <a href="http://cn.gangyiku.com/">港易生活网</a><a href="http://www.bgjj.cc/">布谷家居网</a><a href="http://health.office369.com/">办公家居网</a><a href="http://travel.office369.com">办公旅游网</a><a href="http://ask.bgjj.cc/">家居问答网</a><a href="https://tuku.caiding5.net/">彩盯图库网</a><a href="https://www.picsok.com/">PICSOK</a><a href="http://xiaofei.caiding5.cn/">才丁消费网</a> </div> <!--end::Copyright--> <!--begin::Menu--> <ul class="menu menu-gray-600 menu-hover-primary fw-semibold order-1"> <li class="menu-item"> <a href="/changshi/" target="_blank" class="menu-link px-2">办公常识</a> </li> <li class="menu-item"> <a href="/baike/" target="_blank" class="menu-link px-2">办公百科</a> </li> <li class="menu-item"> <a href="/life/" target="_blank" class="menu-link px-2">办公生活</a> </li> </ul> <!--end::Menu--> </div> <!--end::Footer container--> </div> <!--end::Footer--> </div> <!--end:::Main--> </div> <!--end::Wrapper--> </div> <!--end::Page--> </div> <!--end::App--> <div id="kt_scrolltop" class="scrolltop" data-kt-scrolltop="true"> <!--begin::Svg Icon | path: icons/duotune/arrows/arr066.svg--> <span class="svg-icon"> <svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"> <rect opacity="0.5" x="13" y="6" width="13" height="2" rx="1" transform="rotate(90 13 6)" fill="currentColor"></rect> <path d="M12.5657 8.56569L16.75 12.75C17.1642 13.1642 17.8358 13.1642 18.25 12.75C18.6642 12.3358 18.6642 11.6642 18.25 11.25L12.7071 5.70711C12.3166 5.31658 11.6834 5.31658 11.2929 5.70711L5.75 11.25C5.33579 11.6642 5.33579 12.3358 5.75 12.75C6.16421 13.1642 6.83579 13.1642 7.25 12.75L11.4343 8.56569C11.7467 8.25327 12.2533 8.25327 12.5657 8.56569Z" fill="currentColor"></path> </svg> </span> <!--end::Svg Icon--> </div> <!--begin::Javascript--> <script>var hostUrl = "/static/default/pc/";</script> <!--begin::Global Javascript Bundle(mandatory for all pages)--> <script src="/static/default/pc/plugins/global/plugins.bundle.js"></script> <script src="/static/default/pc/js/scripts.bundle.js"></script> <!--end::Global Javascript Bundle--> <!--end::Javascript--> </body> <!--end::Body--> </html>