React低代码项目:Redux 状态管理

吐司问卷:Redux 状态管理

Date: February 18, 2025 5:37 PM (GMT+8)


Redux 管理用户信息

命名规范:

以 Info 结尾表示获取Reudx信息,比如 useGetUserInfo.ts

以 data 结尾表示获取服务端信息,比如 useLoadQuestionData



采用 Redux 管理用户信息

Redux store 设计:

src/store/index.ts

import { configureStore } from '@reduxjs/toolkit'
import userReducer, { UserStateType } from './userReducer'

export type StateType = {
  user: UserStateType
}

export default configureStore({
  reducer: {
    user: userReducer,
  },
})

userReducer 开发:

src/store/userReducer.ts

import { createSlice, PayloadAction } from '@reduxjs/toolkit'

export type UserStateType = {
  username: string
  nickname: string
}

const INIT_STATE: UserStateType = {
  username: '',
  nickname: '',
}

export const userSlice = createSlice({
  name: 'user',
  initialState: INIT_STATE,
  reducers: {
    loginReducer: (
      state: UserStateType,
      action: PayloadAction
    ) => {
      return action.payload
    },
    logoutReducer: () => {
      return INIT_STATE
    },
  },
})

export const { loginReducer, logoutReducer } = userSlice.actions
export default userSlice.reducer

src/index.ts

 import React from 'react'
 import ReactDOM from 'react-dom/client'
+import { Provider } from 'react-redux'
+import store from './store'
 import App from './App'
 
 const root = ReactDOM.createRoot(document.getElementById('root') as HTMLElement)
 root.render(
   
-    
+    
+      
+    
   
 )


点击Logo跳转优化

**需求:**原本点击 Logo 会跳转到 home 页。现在需要根据是否有用户信息,进行区分判断。

如果有用户信息,点击 Logo 则跳转到管理页面。没有则到 home 页面。

src/component/Logo.tsx

-import React, { FC } from 'react'
+import React, { FC, useState, useEffect } from 'react'
 import { Space, Typography } from 'antd'
 import { BlockOutlined } from '@ant-design/icons'
 import { Link } from 'react-router-dom'
+import useGetUserInfo from '../hooks/useGetUserInfo'
+import { HOME_PATHNAME, MANAGE_INDEX_PATHNAME } from '../router/index'
 import styles from './Logo.module.scss'
 
 const { Title } = Typography
 
 const Logo: FC = () => {
+  const { username } = useGetUserInfo()
+  const [pathname, setPathname] = useState(HOME_PATHNAME)
+  useEffect(() => {
+    if (username) {
+      setPathname(MANAGE_INDEX_PATHNAME)
+    }
+  }, [username])
   return (
     
- + <BlockOutlined /> </code></pre> <hr> <hr> <h3>自定义 Hook 统一加载用户信息</h3> <p><strong>思路:</strong></p> <ul> <li>开发获取 Redux 中用户信息</li> <li>开发获取 服务端 用户信息,并与 Redux 联动</li> <li>设计页面加载状态(根据用户信息获取与否进行判断) <ul> <li>有用户信息,则停止加载。没有则进行加载。</li> </ul> </li> </ul> <p><code>useGetUserInfo.tsx</code></p> <pre><code class="prism language-tsx">import { useSelector } from 'react-redux' import { StateType } from '../store' import { UserStateType } from '../store/userReducer' function useGetUserInfo() { const { username, nickname } = useSelector<StateType>( (state: StateType) => state.user ) as UserStateType return { username, nickname } } export default useGetUserInfo </code></pre> <p><code>useLoadUserData.ts</code></p> <pre><code class="prism language-tsx">import { useEffect, useState } from 'react' import { useRequest } from 'ahooks' import { getUserInfoService } from '../services/user' import { useDispatch } from 'react-redux' import useGetUserInfo from './useGetUserInfo' import { loginReducer } from '../store/userReducer' function useLoadUserData() { const [waitingUserData, setWaitingUserData] = useState<boolean>(false) const dispatch = useDispatch() // 加载用户信息 const { run } = useRequest(getUserInfoService, { manual: true, onSuccess: res => { const { username, nickname } = res // 存储到 Redux 中 dispatch(loginReducer({ username, nickname })) }, onFinally() { setWaitingUserData(false) }, }) // Redux 中数据 const { username } = useGetUserInfo() useEffect(() => { if (username) { setWaitingUserData(false) } run() }, [username]) return { waitingUserData } } export default useLoadUserData </code></pre> <hr> <h4>用户退出功能优化</h4> <p>**思路:**用户退出不仅需要清空 Redux 信息,还要清空本地 token 信息</p> <p><code>src/component/userInfo.tsx</code></p> <pre><code class="prism language-tsx"> import { LOGIN_PATHNAME } from '../router' import { Button, message } from 'antd' import { UserOutlined } from '@ant-design/icons' -import { getUserInfoService } from '../services/user' import { removeToken } from '../utils/user-token' -import { useRequest } from 'ahooks' +import useGetUserInfo from '../hooks/useGetUserInfo' +import { useDispatch } from 'react-redux' +import { logoutReducer } from '../store/userReducer' const UserInfo: FC = () => { const nav = useNavigate() - const { data } = useRequest(getUserInfoService) - const { username, nickname } = data || {} + const { username, nickname } = useGetUserInfo() + const dispatch = useDispatch() const logout = () => { - removeToken() + dispatch(logoutReducer()) // 清空 redux user 中的数据 + removeToken() // 清空 token 的存储 message.success('退出成功') nav(LOGIN_PATHNAME) } </code></pre> <hr> <hr> <h3>根据用户登录状态动态跳转页面</h3> <p><strong>需求:</strong></p> <ul> <li>当用户已经登陆,在问卷管理页面时,URL中输 /login,会自动返回问卷管理页面,而非再登陆</li> </ul> <p><strong>实现思路:</strong></p> <ul> <li>设计 useNavPage 钩子函数:获取用户状态与URL,根据用户状态判断是否页面跳转走向。</li> </ul> <p><code>useNavPage.ts</code></p> <pre><code class="prism language-tsx">import { useEffect } from 'react' import { useNavigate, useLocation } from 'react-router-dom' import { isLoginOrRegister, isNoNeedUserInfo, MANAGE_INDEX_PATHNAME, LOGIN_PATHNAME, } from '../router' import useGetUserInfo from './useGetUserInfo' function useNavPage(waitingUserData: boolean) { const { username } = useGetUserInfo() const { pathname } = useLocation() const nav = useNavigate() useEffect(() => { if (waitingUserData) return if (username) { if (isLoginOrRegister(pathname)) { nav(MANAGE_INDEX_PATHNAME) } return } if (isNoNeedUserInfo(pathname)) { return } else { nav(LOGIN_PATHNAME) } }, [waitingUserData, username, pathname]) } export default useNavPage </code></pre> <p><code>src/router/index.ts</code></p> <pre><code class="prism language-tsx"> export function isLoginOrRegister(pathname: string) { return [LOGIN_PATHNAME, REGISTER_PATHNAME].includes(pathname) } export function isNoNeedUserInfo(pathname: string) { return [HOME_PATHNAME, LOGIN_PATHNAME, REGISTER_PATHNAME].includes(pathname) } </code></pre> <hr> <hr> <hr> <h2>Bugfix</h2> <h3>Q:请求不断发送</h3> <blockquote> <p><strong>项目中有一处 请求会不断发送,在 Chrome Network 中可以看出。</strong></p> </blockquote> <p><code>useLoadUserData.ts</code></p> <pre><code class="prism language-tsx">useEffect(() => { if (username) { setWaitingUserData(false) } run() // 这里可能造成循环调用 }, [username]) </code></pre> <p><strong>问题原因:</strong></p> <ul> <li>当Redux中的<code>username</code>为空时,<code>run()</code>会执行获取用户信息</li> <li>获取成功后通过<code>dispatch(loginReducer)</code>更新username</li> <li>username更新触发useEffect再次执行</li> <li>形成「获取数据 → 更新username → 触发请求」的循环</li> </ul> <p><strong>解决方案:</strong></p> <p>修改useLoadUserData.ts中的useEffect:</p> <pre><code class="prism language-tsx">useEffect(() => { // 当已有用户信息时不再请求 if (username) { setWaitingUserData(false) return } run() }, [username]) // 保持原有依赖 </code></pre> <hr> <hr> <h3>Q:页面刷新自动弹回登陆界面</h3> <p><strong>问题原因分析:</strong></p> <ol> <li>在<code>useLoadUserData</code> hook中,用户信息加载完成后才会设置<code>waitingUserData</code>为false</li> <li><code>useNavPage</code> hook中会在用户信息未加载完成时判断路由权限</li> <li>页面刷新时会清空Redux状态,导致需要重新加载用户信息</li> <li>用户信息加载是异步操作,在加载完成前路由守卫已执行跳转判断</li> </ol> <p>解决方案: 修改<code>useLoadUserData.ts</code>文件,在组件挂载时立即触发用户信息加载:</p> <p><code>useLoadUserData.ts</code></p> <pre><code class="prism language-tsx">function useLoadUserData() { const [waitingUserData, setWaitingUserData] = useState<boolean>(true) // 初始值改为 true const dispatch = useDispatch() // 加载用户信息 const { run } = useRequest(getUserInfoService, { manual: true, onSuccess: res => { const { username, nickname } = res dispatch(loginReducer({ username, nickname })) }, onFinally() { setWaitingUserData(false) }, }) // 添加 useEffect 立即执行数据加载 useEffect(() => { run() }, []) // Redux 中数据 const { username } = useGetUserInfo() useEffect(() => { if (username) { setWaitingUserData(false) } }, [username]) return { waitingUserData } } </code></pre> <p><strong>修改说明:</strong></p> <ol> <li>将<code>waitingUserData</code>初始值设为<code>true</code>,确保加载状态初始正确</li> <li>添加立即执行的<code>useEffect</code>触发用户信息加载</li> <li>保留原有的username依赖检查作为双重保障</li> </ol> <p>同时需要确保在<code>utils/user-token.ts</code>中正确实现了token的持久化存储(根据代码片段推断应已实现)。</p> <p>这个修改可以保证:</p> <ol> <li>页面刷新时立即触发用户信息加载</li> <li>在用户信息加载完成前保持等待状态</li> <li>路由守卫(<code>useNavPage</code>)会等待用户信息加载完成后再进行跳转判断</li> <li>避免在异步加载过程中误判未登录状态</li> </ol> </div> </div> </div> </div> </div> <!--PC和WAP自适应版--> <div id="SOHUCS" sid="1894988307482341376"></div> <script type="text/javascript" src="/views/front/js/chanyan.js"></script> <!-- 文章页-底部 动态广告位 --> <div class="youdao-fixed-ad" id="detail_ad_bottom"></div> </div> <div class="col-md-3"> <div class="row" id="ad"> <!-- 文章页-右侧1 动态广告位 --> <div id="right-1" class="col-lg-12 col-md-12 col-sm-4 col-xs-4 ad"> <div class="youdao-fixed-ad" id="detail_ad_1"> </div> </div> <!-- 文章页-右侧2 动态广告位 --> <div id="right-2" class="col-lg-12 col-md-12 col-sm-4 col-xs-4 ad"> <div class="youdao-fixed-ad" id="detail_ad_2"></div> </div> <!-- 文章页-右侧3 动态广告位 --> <div id="right-3" class="col-lg-12 col-md-12 col-sm-4 col-xs-4 ad"> <div class="youdao-fixed-ad" id="detail_ad_3"></div> </div> </div> </div> </div> </div> </div> <div class="container"> <h4 class="pt20 mb15 mt0 border-top">你可能感兴趣的:(#,低代码项目,react.js,低代码,前端)</h4> <div id="paradigm-article-related"> <div class="recommend-post mb30"> <ul class="widget-links"> <li><a href="/article/1950233199242178560.htm" title="x86-64汇编语言训练程序与实战" target="_blank">x86-64汇编语言训练程序与实战</a> <span class="text-muted">十除以十等于一</span> <div>本文还有配套的精品资源,点击获取简介:汇编语言是一种低级语言,与机器代码紧密相关,特别适用于编写系统级代码及性能要求高的应用。nasm编译器是针对x86和x86-64架构的汇编语言编译器,支持多种语法风格和指令集。项目Euler提供数学和计算机科学问题,鼓励编程技巧应用,前100个问题的答案可共享。x86-64架构扩展了寄存器数量并引入新指令,提升了数据处理效率。学习汇编语言能够深入理解计算机底层</div> </li> <li><a href="/article/1950232820773351424.htm" title="移动端城市区县二级联动选择功能实现包" target="_blank">移动端城市区县二级联动选择功能实现包</a> <span class="text-muted">good2know</span> <div>本文还有配套的精品资源,点击获取简介:本项目是一套为移动端设计的jQuery实现方案,用于简化用户在选择城市和区县时的流程。它包括所有必需文件:HTML、JavaScript、CSS及图片资源。通过动态更新下拉菜单选项,实现城市到区县的联动效果,支持数据异步加载。开发者可以轻松集成此功能到移动网站或应用,并可基于需求进行扩展和优化。1.jQuery移动端解决方案概述jQuery技术简介jQuery</div> </li> <li><a href="/article/1950232190038110208.htm" title="day15|前端框架学习和算法" target="_blank">day15|前端框架学习和算法</a> <span class="text-muted">universe_01</span> <a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/%E7%AE%97%E6%B3%95/1.htm">算法</a><a class="tag" taget="_blank" href="/search/%E7%AC%94%E8%AE%B0/1.htm">笔记</a> <div>T22括号生成先把所有情况都画出来,然后(在满足什么情况下)把不符合条件的删除。T78子集要画树状图,把思路清晰。可以用暴力法、回溯法和DFS做这个题DFS深度搜索:每个边都走完,再回溯应用:二叉树搜索,图搜索回溯算法=DFS+剪枝T200岛屿数量(非常经典BFS宽度把树状转化成队列形式,lambda匿名函数“一次性的小函数,没有名字”setup语法糖:让代码更简洁好写的语法ref创建:基本类型的</div> </li> <li><a href="/article/1950228285266915328.htm" title="Git 与 GitHub 的对比与使用指南" target="_blank">Git 与 GitHub 的对比与使用指南</a> <span class="text-muted">一念&</span> <a class="tag" taget="_blank" href="/search/%E5%85%B6%E5%AE%83/1.htm">其它</a><a class="tag" taget="_blank" href="/search/git/1.htm">git</a><a class="tag" taget="_blank" href="/search/github/1.htm">github</a> <div>Git与GitHub的对比与使用指南在软件开发中,Git和GitHub是两个密切相关但本质不同的工具。下面我将逐步解释它们的定义、区别、核心概念以及如何协同使用,确保内容真实可靠,基于广泛的技术实践。1.什么是Git?Git是一个分布式版本控制系统,由LinusTorvalds于2005年创建。它的核心功能是跟踪代码文件的变化,帮助开发者管理项目历史记录、协作和回滚错误。Git是开源的,可以在本地</div> </li> <li><a href="/article/1950227570091945984.htm" title="叮嘱!北恒高级班周一丰创投杯量化私募大赛不正规!受骗不能提现出金被骗真相曝光!" target="_blank">叮嘱!北恒高级班周一丰创投杯量化私募大赛不正规!受骗不能提现出金被骗真相曝光!</a> <span class="text-muted">天权顾问</span> <div>量化北恒私募实盘大赛周一丰投票项目安全吗?量化北恒私募实盘大赛周一丰积分投票已经亏损被骗了怎么办?警惕!量化北恒私募实盘大赛周一丰十选五项目合法吗——杀猪盘骗局!被骗提不了款!提不了现!出不来金!不要上当!自古有句话讲得好“人善被欺、马善被骑”,现如今也是被骗子利用到了极致,人善就真该被欺骗吗?狡猾的骗子们就利用到了这点,利用同情心、爱心去进行诈骗,宣传公益捐款、爱心慈善打比赛来骗取资金!正常的投</div> </li> <li><a href="/article/1950226643771518976.htm" title="关于流媒体播放器EasyPlayer和EasyPlayerPro的介绍以及其区别" target="_blank">关于流媒体播放器EasyPlayer和EasyPlayerPro的介绍以及其区别</a> <span class="text-muted">EasyDarwin</span> <a class="tag" taget="_blank" href="/search/EasyDarwin/1.htm">EasyDarwin</a><a class="tag" taget="_blank" href="/search/%E9%9F%B3%E8%A7%86%E9%A2%91/1.htm">音视频</a><a class="tag" taget="_blank" href="/search/ffmpeg/1.htm">ffmpeg</a><a class="tag" taget="_blank" href="/search/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/1.htm">人工智能</a><a class="tag" taget="_blank" href="/search/%E5%A4%A7%E6%95%B0%E6%8D%AE/1.htm">大数据</a><a class="tag" taget="_blank" href="/search/ar/1.htm">ar</a> <div>EasyPlayer是一款流媒体播放器系列项目,它支持多种流媒体协议的播放,包括但不限于RTSP、RTMP、HTTP、HLS、UDP、RTP、File等。除此之外,EasyPlayer还支持本地文件播放和多种功能特性,包括本地抓拍、本地录像、播放旋转、多屏播放、倍数播放等。EasyPlayer核心基于ffmpeg,稳定、高效、可靠、可控。随着多年的不断发展和迭代,EasyPlayer基于成功的实践</div> </li> <li><a href="/article/1950226391064702976.htm" title="Flowable 实战落地核心:选型决策与坑点破解" target="_blank">Flowable 实战落地核心:选型决策与坑点破解</a> <span class="text-muted">练习时长两年半的程序员小胡</span> <a class="tag" taget="_blank" href="/search/Flowable/1.htm">Flowable</a><a class="tag" taget="_blank" href="/search/%E6%B5%81%E7%A8%8B%E5%BC%95%E6%93%8E%E5%AE%9E%E6%88%98%E6%8C%87%E5%8D%97/1.htm">流程引擎实战指南</a><a class="tag" taget="_blank" href="/search/%E4%BD%8E%E4%BB%A3%E7%A0%81/1.htm">低代码</a><a class="tag" taget="_blank" href="/search/BPMN/1.htm">BPMN</a><a class="tag" taget="_blank" href="/search/%E6%B5%81%E7%A8%8B%E5%BC%95%E6%93%8E/1.htm">流程引擎</a><a class="tag" taget="_blank" href="/search/flowable/1.htm">flowable</a><a class="tag" taget="_blank" href="/search/%E5%90%8E%E7%AB%AF/1.htm">后端</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a> <div>在企业级流程引擎的落地过程中,选型的准确性和坑点的预见性直接决定项目成败。本文聚焦Flowable实战中最关键的“选型决策”与“常见坑点”,结合真实项目经验,提供可落地的解决方案。一、流程引擎选型:从业务本质出发1.1选型的三大核心维度企业在选择流程引擎时,需避免陷入“技术崇拜”,应回归业务本质。评估Flowable是否适用,可从三个维度判断:业务复杂度若流程涉及动态审批链(如按金额自动升级审批)</div> </li> <li><a href="/article/1950225786325757952.htm" title="高省邀请码哪个级别最高?高省原始高级邀请码500888" target="_blank">高省邀请码哪个级别最高?高省原始高级邀请码500888</a> <span class="text-muted">凌风导师</span> <div>高省是杭州长孚科技有限公司开辟的一个项目(高省APP),已获数千万投资,主打外交电商+新零售,提供淘宝好省京东等主流电商途径的大额优惠券(直接在淘宝等途径购买是没有该优惠券的)。用户们可以利用这些软件享受折扣买东西优惠,一起来看看购物省钱app网上买东西省钱的软件有哪些吧!网购省钱软件靠谱吗包围淘宝等途径产品的左右,也便是你可以大概在高省买你的确想买的任何产品,并且享受额定优惠,优惠力度为-(大部</div> </li> <li><a href="/article/1950224616647618560.htm" title="JAVA接口机结构解析" target="_blank">JAVA接口机结构解析</a> <span class="text-muted">秃狼</span> <a class="tag" taget="_blank" href="/search/SpringBoot/1.htm">SpringBoot</a><a class="tag" taget="_blank" href="/search/%E5%85%AB%E8%82%A1%E6%96%87/1.htm">八股文</a><a class="tag" taget="_blank" href="/search/Java/1.htm">Java</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E5%AD%A6%E4%B9%A0/1.htm">学习</a> <div>什么是接口机在Java项目中,接口机通常指用于与外部系统进行数据交互的中间层,负责处理请求和响应的转换、协议适配、数据格式转换等任务。接口机的结构我们的接口机的结构分为两个大部分,外部接口机和内部接口机,在业务的调度上也是通过mq来实现的,只要的目的就是为了解耦合和做差异化。在接口机中主要的方法就是定时任务,消息的发送和消费,其他平台调用接口机只能提供外部接口机的方法进行调用,外部接口机可以提供消</div> </li> <li><a href="/article/1950222990553706496.htm" title="可处理!环境排放3.0项目怎么提现?裕华投资会刘裕华免费荐股骗局曝光!" target="_blank">可处理!环境排放3.0项目怎么提现?裕华投资会刘裕华免费荐股骗局曝光!</a> <span class="text-muted">墨守成法</span> <div>骗子冒充裕华投资会刘裕华通过伪造或仿冒投资平台,向股民发送虚假环境排放3.0项目链接,引导股民者下载进行投资,以送一万体验金操作小额投资能提现作为诱饵,不断引导消费者加大资金投入。不法分子随后迅速转移资金,当投资者要提现时候就以“流水未完成”“登录异常”“服务器维护”“比赛未结束”等借口不让提现,直到平台关闭跑了或者完成流水任务为由一波亏完。在以翻本为借口继续让投资者加入资金。若你不幸遭遇到裕华投</div> </li> <li><a href="/article/1950218817753903104.htm" title="【项目实战】 容错机制与故障恢复:保障系统连续性的核心体系" target="_blank">【项目实战】 容错机制与故障恢复:保障系统连续性的核心体系</a> <span class="text-muted">本本本添哥</span> <a class="tag" taget="_blank" href="/search/004/1.htm">004</a><a class="tag" taget="_blank" href="/search/-/1.htm">-</a><a class="tag" taget="_blank" href="/search/%E7%A0%94%E6%95%88%E4%B8%8EDevOps%E8%BF%90%E7%BB%B4%E5%B7%A5%E5%85%B7%E9%93%BE/1.htm">研效与DevOps运维工具链</a><a class="tag" taget="_blank" href="/search/002/1.htm">002</a><a class="tag" taget="_blank" href="/search/-/1.htm">-</a><a class="tag" taget="_blank" href="/search/%E8%BF%9B%E9%98%B6%E5%BC%80%E5%8F%91%E8%83%BD%E5%8A%9B/1.htm">进阶开发能力</a><a class="tag" taget="_blank" href="/search/%E5%88%86%E5%B8%83%E5%BC%8F/1.htm">分布式</a> <div>在分布式系统中,硬件故障、网络波动、软件异常等问题难以避免。容错机制与故障恢复的核心目标是:通过主动检测故障、自动隔离风险、快速转移负载、重建数据一致性,最大限度减少故障对业务的影响,保障系统“持续可用”与“数据不丢失”。以下从核心机制、实现方式、典型案例等维度展开说明。一、故障检测:及时发现异常节点故障检测是容错的第一步,需通过多维度手段实时感知系统组件状态,确保故障被快速识别。1.健康检查与心</div> </li> <li><a href="/article/1950213272120651776.htm" title="Redis + Caffeine 实现高效的两级缓存架构" target="_blank">Redis + Caffeine 实现高效的两级缓存架构</a> <span class="text-muted">周童學</span> <a class="tag" taget="_blank" href="/search/Java/1.htm">Java</a><a class="tag" taget="_blank" href="/search/%E7%BC%93%E5%AD%98/1.htm">缓存</a><a class="tag" taget="_blank" href="/search/redis/1.htm">redis</a><a class="tag" taget="_blank" href="/search/%E6%9E%B6%E6%9E%84/1.htm">架构</a> <div>Redis+Caffeine实现高效的两级缓存架构引言在现代高并发系统中,缓存是提升系统性能的关键组件之一。传统的单一缓存方案往往难以同时满足高性能和高可用性的需求。本文将介绍如何结合Redis和Caffeine构建一个高效的两级缓存系统,并通过三个版本的演进展示如何逐步优化代码结构。项目源代码:github地址、gitee地址两级缓存架构概述两级缓存通常由本地缓存(如Caffeine)和分布式缓</div> </li> <li><a href="/article/1950209116165173248.htm" title="uniapp微信小程序 - 详解微信小程序平台用户授权登录全流程,uniapp v3版本中小程序端开发下用户点击登录后获取手机号/昵称/性别/头像等信息完成登录(提供完整示例代码,一键复制开箱即用)" target="_blank">uniapp微信小程序 - 详解微信小程序平台用户授权登录全流程,uniapp v3版本中小程序端开发下用户点击登录后获取手机号/昵称/性别/头像等信息完成登录(提供完整示例代码,一键复制开箱即用)</a> <span class="text-muted">十一猫咪爱养鱼</span> <a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF%E7%BB%84%E4%BB%B6%E4%B8%8E%E5%8A%9F%E8%83%BD%28%E5%BC%80%E7%AE%B1%E5%8D%B3%E7%94%A8%29/1.htm">前端组件与功能(开箱即用)</a><a class="tag" taget="_blank" href="/search/uniapp%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98%E8%A7%A3%E5%86%B3/1.htm">uniapp常见问题解决</a><a class="tag" taget="_blank" href="/search/uniapp/1.htm">uniapp</a><a class="tag" taget="_blank" href="/search/vue3/1.htm">vue3</a><a class="tag" taget="_blank" href="/search/uniapp3%E5%B0%8F%E7%A8%8B%E5%BA%8F%E6%8E%88%E6%9D%83%E7%99%BB%E5%BD%95/1.htm">uniapp3小程序授权登录</a><a class="tag" taget="_blank" href="/search/%E5%BE%AE%E4%BF%A1%E5%B0%8F%E7%A8%8B%E5%BA%8F%E7%99%BB%E5%BD%95%E8%8E%B7%E5%8F%96%E7%94%A8%E6%88%B7%E4%BF%A1%E6%81%AF%E6%95%99%E7%A8%8B/1.htm">微信小程序登录获取用户信息教程</a><a class="tag" taget="_blank" href="/search/%E8%8E%B7%E5%8F%96%E7%94%A8%E6%88%B7%E6%98%B5%E7%A7%B0%E6%89%8B%E6%9C%BA%E5%8F%B7%E5%A4%B4%E5%83%8F%E4%BF%A1%E6%81%AF%E7%99%BB%E5%BD%95/1.htm">获取用户昵称手机号头像信息登录</a><a class="tag" taget="_blank" href="/search/vue3%E7%89%88%E6%9C%AC%E5%B0%8F%E7%A8%8B%E5%BA%8F%E5%B9%B3%E5%8F%B0%E6%8E%88%E6%9D%83%E7%99%BB%E5%BD%95/1.htm">vue3版本小程序平台授权登录</a><a class="tag" taget="_blank" href="/search/uniap%E5%B0%8F%E7%A8%8B%E5%BA%8F%E7%AB%AF%E7%94%A8%E6%88%B7%E7%99%BB%E5%BD%95%E6%B5%81%E7%A8%8B/1.htm">uniap小程序端用户登录流程</a><a class="tag" taget="_blank" href="/search/uni%E5%AE%8C%E6%95%B4%E7%9A%84%E5%B0%8F%E7%A8%8B%E5%BA%8F%E5%B9%B3%E5%8F%B0%E7%99%BB%E5%BD%95%E6%BA%90%E7%A0%81/1.htm">uni完整的小程序平台登录源码</a> <div>效果图在uniapp微信小程序端开发中,超详细实现用户授权登录完整功能源码,用户授权后获取手机号/昵称/头像/性别等,提供完整思路流程及逻辑讲解。uniappVue3和Vue2都能用,你也可以直接复制粘贴,然后改下参数放到你的项目中去就行。整体思路做功能之前,先来看一下整体流程是</div> </li> <li><a href="/article/1950207097023033344.htm" title="Pktgen-DPDK:开源网络测试工具的深度解析与应用" target="_blank">Pktgen-DPDK:开源网络测试工具的深度解析与应用</a> <span class="text-muted">艾古力斯</span> <div>本文还有配套的精品资源,点击获取简介:Pktgen-DPDK是基于DPDK的高性能流量生成工具,适用于网络性能测试、硬件验证及协议栈开发。它支持多种网络协议,能够模拟高吞吐量的数据包发送。本项目通过利用DPDK的高速数据包处理能力,允许用户自定义数据包内容,并实现高效的数据包管理与传输。文章将指导如何安装DPDK、编译Pktgen、配置工具以及使用方法,最终帮助开发者和网络管理员深入理解并优化网络</div> </li> <li><a href="/article/1950201171369062400.htm" title="Zread.AI:一键将GitHub项目转化为结构化中文手册的AI代码维基工具" target="_blank">Zread.AI:一键将GitHub项目转化为结构化中文手册的AI代码维基工具</a> <span class="text-muted"></span> <div>Zread.AI:一键将GitHub项目转化为结构化中文手册的AI代码维基工具文章来源:PoixeAI文章目录Zread.AI工具概述核心功能优势亮点典型应用场景上手指南注意事项官网地址Zread.AI由智谱Z.ai推出,是一款面向开发者的AI代码维基工具,可在几秒内把任何公开GitHub仓库转化为结构化中文手册,并通过独家Buzz面板聚合commits、issues与相关新闻,让项目脉搏一目了然</div> </li> <li><a href="/article/1950198307473125376.htm" title="个人创业能月入两万的小生意,适合新手做的小生意项目!" target="_blank">个人创业能月入两万的小生意,适合新手做的小生意项目!</a> <span class="text-muted">优惠券高省</span> <div>互联网浪潮的风起云涌,使得许多人萌生了创业的想法,但同时创业也并不简单,本身市场里面的水很深,如果大家初次创业的话,很有可能会遭受经济的损失。小编为大家着重介绍适合所有人做的月入2万的10个小生意,一起来看看吧。首先推荐大家做互联网电商创业,零投资,轻创业,没有压力,上手就赚钱!门槛低,天花板高!高省时代在变,分享经济是趋势!什么是分享经济:把你认为好的告诉身边的人叫分享,,所以分享经济就是把好的</div> </li> <li><a href="/article/1950197387460931584.htm" title="基于DeepSeek的下一代大型游戏开发革命:架构、核心技术与项目管理实践" target="_blank">基于DeepSeek的下一代大型游戏开发革命:架构、核心技术与项目管理实践</a> <span class="text-muted">Liudef06小白</span> <a class="tag" taget="_blank" href="/search/%E7%89%B9%E6%AE%8A%E4%B8%93%E6%A0%8F/1.htm">特殊专栏</a><a class="tag" taget="_blank" href="/search/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/1.htm">人工智能</a><a class="tag" taget="_blank" href="/search/AIGC/1.htm">AIGC</a><a class="tag" taget="_blank" href="/search/%E6%9E%B6%E6%9E%84/1.htm">架构</a><a class="tag" taget="_blank" href="/search/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/1.htm">人工智能</a><a class="tag" taget="_blank" href="/search/deepseek/1.htm">deepseek</a> <div>基于DeepSeek的下一代大型游戏开发革命:架构、核心技术与项目管理实践DeepSeek大模型正重塑游戏开发范式,本文将深入解析如何利用这一革命性技术构建下一代大型游戏,涵盖从架构设计到项目管理的全流程实践。目录DeepSeek游戏引擎核心架构1.1神经符号系统融合架构1.2动态世界生成引擎智能NPC与剧情系统2.1角色人格建模技术2.2动态叙事生成算法大型项目管理体系3.1敏捷-AI混合开发流</div> </li> <li><a href="/article/1950194868756213760.htm" title="程序员必备:10 个提升代码质量的工具" target="_blank">程序员必备:10 个提升代码质量的工具</a> <span class="text-muted">大力出奇迹985</span> <a class="tag" taget="_blank" href="/search/%E5%AE%A0%E7%89%A9/1.htm">宠物</a> <div>在软件开发过程中,代码质量对项目的成功起着决定性作用。高质量的代码不仅易于维护和扩展,还能有效降低成本并提升可靠性。本文精心挑选了10个程序员必备工具,助力提升代码质量。这些工具涵盖代码格式化、静态分析、代码审查、测试、性能优化、安全扫描、版本控制、依赖管理、代码生成以及文档生成等多个关键领域。通过使用它们,开发者能够高效地发现并解决代码中的潜在问题,遵循最佳实践,提升代码的可读性、可维护性与安全</div> </li> <li><a href="/article/1950194728943284224.htm" title="java实习生40多天有感" target="_blank">java实习生40多天有感</a> <span class="text-muted">别拿爱情当饭吃</span> <div>从5月15日开始,我开始第一步步入社会,我今年大三,在一家上市互联网公司做一名实习生,主要做java后端开发。开始的时候,觉得公司的环境挺不错的,不过因为公司在CBD,所以隔壁的午饭和晚饭都要20+RMB,而且还吃不饱,这让我感觉挺郁闷的。一到下午,我就会犯困(因为饿)。因此,我又不得不买一些干粮在公司屯着。关于技术,有一个比较大的项目在需求调研当中,我们做实习生,就是辅助项目经理,测试功能,并且</div> </li> <li><a href="/article/1950191208873652224.htm" title="vue element 封装表单" target="_blank">vue element 封装表单</a> <span class="text-muted">影子信息</span> <a class="tag" taget="_blank" href="/search/vue/1.htm">vue</a><a class="tag" taget="_blank" href="/search/vue.js/1.htm">vue.js</a><a class="tag" taget="_blank" href="/search/javascript/1.htm">javascript</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a> <div>背景:在前端系统开发中,系统页面涉及到的表单组件比较多,所以进行了简单的封装。封装的包括一些Form表单组件,如下:input输入框、select下拉框、等实现效果:理论知识:表单组件官方链接:点击跳转封装组件:封装组件的思路:不封装element组件,每一个input组件绑定一个form对象,例如官网。简单封装element组件,利用for循环生成form表单的每一项el-form-item。进</div> </li> <li><a href="/article/1950191165710069760.htm" title="前端面试每日 3+1 —— 第39天" target="_blank">前端面试每日 3+1 —— 第39天</a> <span class="text-muted">浪子神剑</span> <div>今天的面试题(2019.05.25)——第39天[html]title与h1、b与strong、i与em的区别分别是什么?[css]写出你知道的CSS水平和垂直居中的方法[js]说说你对模块化的理解[软技能]公钥加密和私钥加密是什么?《论语》,曾子曰:“吾日三省吾身”(我每天多次反省自己)。前端面试每日3+1题,以面试题来驱动学习,每天进步一点!让努力成为一种习惯,让奋斗成为一种享受!欢迎在Iss</div> </li> <li><a href="/article/1950190146074767360.htm" title="大数据技术笔记—spring入门" target="_blank">大数据技术笔记—spring入门</a> <span class="text-muted">卿卿老祖</span> <div>篇一spring介绍spring.io官网快速开始Aop面向切面编程,可以任何位置,并且可以细致到方法上连接框架与框架Spring就是IOCAOP思想有效的组织中间层对象一般都是切入service层spring组成前后端分离已学方式,前后台未分离:Spring的远程通信:明日更新创建第一个spring项目来源:科多大数据</div> </li> <li><a href="/article/1950187554129113088.htm" title="Django学习笔记(一)" target="_blank">Django学习笔记(一)</a> <span class="text-muted"></span> <div>学习视频为:pythondjangoweb框架开发入门全套视频教程一、安装pipinstalldjango==****检查是否安装成功django.get_version()二、django新建项目操作1、新建一个项目django-adminstartprojectproject_name2、新建APPcdproject_namedjango-adminstartappApp注:一个project</div> </li> <li><a href="/article/1950185537319006208.htm" title="新手如何通过github pages静态网站托管搭建个人网站和项目站点" target="_blank">新手如何通过github pages静态网站托管搭建个人网站和项目站点</a> <span class="text-muted">vvandre</span> <a class="tag" taget="_blank" href="/search/Web%E6%8A%80%E6%9C%AF/1.htm">Web技术</a><a class="tag" taget="_blank" href="/search/github/1.htm">github</a> <div>一、githubpages静态网站托管介绍githubpages它是一个免费快捷的静态网站托管服务。对比传统建站,它有哪些优点呢?在传统方式中,首先要租用服务器,服务器上需要运行外部程序,还需要再购买域名,要配置SSL证书,最后还要配置DNS,将域名解析到服务器。这一套繁琐操作,基本上就把小白劝退了。graphTDA[租用服务器]-->B[部署Web应用(运行外部程序,如Nginx)]B-->C[</div> </li> <li><a href="/article/1950183520588591104.htm" title="搭建云手机教程" target="_blank">搭建云手机教程</a> <span class="text-muted">云博客-资源宝</span> <a class="tag" taget="_blank" href="/search/%E6%99%BA%E8%83%BD%E6%89%8B%E6%9C%BA/1.htm">智能手机</a> <div>搭建云手机教程本教程由分享:ziyouhua资源宝整理分享:www.httple.net首先检查自己vps是否支持这个项目sudoaptinstallcpu-checkerkvm-ok如果显示INFO:/dev/kvmexistsKVMaccelerationcanbeused表示支持,可以继续往下看ac13首先安装dockercurl-fsSLhttps://get.docker.com|sud</div> </li> <li><a href="/article/1950179866523529216.htm" title="大学社团管理系统(11831)" target="_blank">大学社团管理系统(11831)</a> <span class="text-muted">codercode2022</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a><a class="tag" taget="_blank" href="/search/boot/1.htm">boot</a><a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a><a class="tag" taget="_blank" href="/search/echarts/1.htm">echarts</a><a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a><a class="tag" taget="_blank" href="/search/cloud/1.htm">cloud</a><a class="tag" taget="_blank" href="/search/sentinel/1.htm">sentinel</a><a class="tag" taget="_blank" href="/search/java-rocketmq/1.htm">java-rocketmq</a> <div>有需要的同学,源代码和配套文档领取,加文章最下方的名片哦一、项目演示项目演示视频二、资料介绍完整源代码(前后端源代码+SQL脚本)配套文档(LW+PPT+开题报告)远程调试控屏包运行三、技术介绍Java语言SSM框架SpringBoot框架Vue框架JSP页面Mysql数据库IDEA/Eclipse开发四、项目截图有需要的同学,源代码和配套文档领取,加文章最下方的名片哦!</div> </li> <li><a href="/article/1950178477592342528.htm" title="前端数据库:IndexedDB从基础到高级使用指南" target="_blank">前端数据库:IndexedDB从基础到高级使用指南</a> <span class="text-muted"></span> <div>文章目录前端数据库:IndexedDB从基础到高级使用指南引言一、IndexedDB概述1.1什么是IndexedDB1.2与其他存储方案的比较二、基础使用2.1打开/创建数据库2.2基本CRUD操作添加数据读取数据更新数据删除数据三、高级特性3.1复杂查询与游标3.2事务高级用法3.3性能优化技巧四、实战案例:构建离线优先的待办事项应用4.1数据库设计4.2同步策略实现五、常见问题与解决方案5.</div> </li> <li><a href="/article/1950177847956008960.htm" title="【免费下载】 Aspose for Java:解锁无水印、无限制的文档处理能力" target="_blank">【免费下载】 Aspose for Java:解锁无水印、无限制的文档处理能力</a> <span class="text-muted">房征劲Kendall</span> <div>AsposeforJava:解锁无水印、无限制的文档处理能力【下载地址】AsposeforJava-去除水印和数量限制AsposeforJava-去除水印和数量限制Aspose是一个著名的文档处理库,专为Java应用程序设计,支持多种文档格式的操作,如Word、Excel、PDF等项目地址:https://gitcode.com/open-source-toolkit/56c82项目介绍在现代企业</div> </li> <li><a href="/article/1950176461205860352.htm" title="GitLab 公共仓库:coding 用到的 git 命令" target="_blank">GitLab 公共仓库:coding 用到的 git 命令</a> <span class="text-muted">summer.335</span> <a class="tag" taget="_blank" href="/search/%E6%9D%82%E4%B8%83%E6%9D%82%E5%85%AB/1.htm">杂七杂八</a><a class="tag" taget="_blank" href="/search/-/1.htm">-</a><a class="tag" taget="_blank" href="/search/%E6%B1%87%E6%80%BB%E6%A0%8F/1.htm">汇总栏</a><a class="tag" taget="_blank" href="/search/gitlab/1.htm">gitlab</a><a class="tag" taget="_blank" href="/search/git/1.htm">git</a> <div>在公司的gitlab公共仓库中写代码做项目时,主要涉及以下常用git命令:一、单个命令讲解1.拉取代码(1)gitclone[仓库URL]‌克隆远程仓库到本地(需确保URL正确)‌(‌2)gitpull[远程仓库名][分支名]‌从远程仓库拉取最新代码(默认拉取origin仓库的master分支)(3)gitfetch[远程仓库名][分支名]‌仅下载远程分支更新,不自动合并2.分支操作(‌1)git</div> </li> <li><a href="/article/1950174694187528192.htm" title="【2025/07/20】GitHub 今日热门项目" target="_blank">【2025/07/20】GitHub 今日热门项目</a> <span class="text-muted">Albert_Lsk</span> <a class="tag" taget="_blank" href="/search/Github%E6%8E%A8%E8%8D%90/1.htm">Github推荐</a><a class="tag" taget="_blank" href="/search/github/1.htm">github</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E6%BA%90%E5%8D%8F%E8%AE%AE/1.htm">开源协议</a><a class="tag" taget="_blank" href="/search/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/1.htm">人工智能</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E6%BA%90/1.htm">开源</a> <div>GitHub今日热门项目每日精选优质开源项目|发现优质开源项目,跟上技术发展趋势报告概览统计项数值说明报告日期2025-07-20(周日)GitHubTrending每日快照数据时间21:28:08实时爬取生成项目总数15个精选热门开源项目⭐总星数392.7K社区认可度指标今日热度+4.5K24小时新增关注数据洞察核心指标项目总览15个精选项目⭐社区认可392.7K总星标数今日热度4.5K新增关注</div> </li> <li><a href="/article/114.htm" title="戴尔笔记本win8系统改装win7系统" target="_blank">戴尔笔记本win8系统改装win7系统</a> <span class="text-muted">sophia天雪</span> <a class="tag" taget="_blank" href="/search/win7/1.htm">win7</a><a class="tag" taget="_blank" href="/search/%E6%88%B4%E5%B0%94/1.htm">戴尔</a><a class="tag" taget="_blank" href="/search/%E6%94%B9%E8%A3%85%E7%B3%BB%E7%BB%9F/1.htm">改装系统</a><a class="tag" taget="_blank" href="/search/win8/1.htm">win8</a> <div>戴尔win8 系统改装win7 系统详述 第一步:使用U盘制作虚拟光驱:         1)下载安装UltraISO:注册码可以在网上搜索。         2)启动UltraISO,点击“文件”—》“打开”按钮,打开已经准备好的ISO镜像文 </div> </li> <li><a href="/article/241.htm" title="BeanUtils.copyProperties使用笔记" target="_blank">BeanUtils.copyProperties使用笔记</a> <span class="text-muted">bylijinnan</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a> <div>BeanUtils.copyProperties VS PropertyUtils.copyProperties 两者最大的区别是: BeanUtils.copyProperties会进行类型转换,而PropertyUtils.copyProperties不会。 既然进行了类型转换,那BeanUtils.copyProperties的速度比不上PropertyUtils.copyProp</div> </li> <li><a href="/article/368.htm" title="MyEclipse中文乱码问题" target="_blank">MyEclipse中文乱码问题</a> <span class="text-muted">0624chenhong</span> <a class="tag" taget="_blank" href="/search/MyEclipse/1.htm">MyEclipse</a> <div>一、设置新建常见文件的默认编码格式,也就是文件保存的格式。 在不对MyEclipse进行设置的时候,默认保存文件的编码,一般跟简体中文操作系统(如windows2000,windowsXP)的编码一致,即GBK。 在简体中文系统下,ANSI 编码代表 GBK编码;在日文操作系统下,ANSI 编码代表 JIS 编码。 Window-->Preferences-->General -</div> </li> <li><a href="/article/495.htm" title="发送邮件" target="_blank">发送邮件</a> <span class="text-muted">不懂事的小屁孩</span> <a class="tag" taget="_blank" href="/search/send+email/1.htm">send email</a> <div> import org.apache.commons.mail.EmailAttachment; import org.apache.commons.mail.EmailException; import org.apache.commons.mail.HtmlEmail; import org.apache.commons.mail.MultiPartEmail; </div> </li> <li><a href="/article/622.htm" title="动画合集" target="_blank">动画合集</a> <span class="text-muted">换个号韩国红果果</span> <a class="tag" taget="_blank" href="/search/html/1.htm">html</a><a class="tag" taget="_blank" href="/search/css/1.htm">css</a> <div>动画 指一种样式变为另一种样式 keyframes应当始终定义0 100 过程 1 transition  制作鼠标滑过图片时的放大效果 css .wrap{ width: 340px;height: 340px; position: absolute; top: 30%; left: 20%; overflow: hidden; bor</div> </li> <li><a href="/article/749.htm" title="网络最常见的攻击方式竟然是SQL注入" target="_blank">网络最常见的攻击方式竟然是SQL注入</a> <span class="text-muted">蓝儿唯美</span> <a class="tag" taget="_blank" href="/search/sql%E6%B3%A8%E5%85%A5/1.htm">sql注入</a> <div>NTT研究表明,尽管SQL注入(SQLi)型攻击记录详尽且为人熟知,但目前网络应用程序仍然是SQLi攻击的重灾区。 信息安全和风险管理公司NTTCom Security发布的《2015全球智能威胁风险报告》表明,目前黑客攻击网络应用程序方式中最流行的,要数SQLi攻击。报告对去年发生的60亿攻击 行为进行分析,指出SQLi攻击是最常见的网络应用程序攻击方式。全球网络应用程序攻击中,SQLi攻击占</div> </li> <li><a href="/article/876.htm" title="java笔记2" target="_blank">java笔记2</a> <span class="text-muted">a-john</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a> <div>类的封装: 1,java中,对象就是一个封装体。封装是把对象的属性和服务结合成一个独立的的单位。并尽可能隐藏对象的内部细节(尤其是私有数据) 2,目的:使对象以外的部分不能随意存取对象的内部数据(如属性),从而使软件错误能够局部化,减少差错和排错的难度。 3,简单来说,“隐藏属性、方法或实现细节的过程”称为——封装。 4,封装的特性:       4.1设置</div> </li> <li><a href="/article/1003.htm" title="[Andengine]Error:can't creat bitmap form path “gfx/xxx.xxx”" target="_blank">[Andengine]Error:can't creat bitmap form path “gfx/xxx.xxx”</a> <span class="text-muted">aijuans</span> <a class="tag" taget="_blank" href="/search/%E5%AD%A6%E4%B9%A0Android%E9%81%87%E5%88%B0%E7%9A%84%E9%94%99%E8%AF%AF/1.htm">学习Android遇到的错误</a> <div>        最开始遇到这个错误是很早以前了,以前也没注意,只当是一个不理解的bug,因为所有的texture,textureregion都没有问题,但是就是提示错误。 昨天和美工要图片,本来是要背景透明的png格式,可是她却给了我一个jpg的。说明了之后她说没法改,因为没有png这个保存选项。 我就看了一下,和她要了psd的文件,还好我有一点</div> </li> <li><a href="/article/1130.htm" title="自己写的一个繁体到简体的转换程序" target="_blank">自己写的一个繁体到简体的转换程序</a> <span class="text-muted">asialee</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E8%BD%AC%E6%8D%A2/1.htm">转换</a><a class="tag" taget="_blank" href="/search/%E7%B9%81%E4%BD%93/1.htm">繁体</a><a class="tag" taget="_blank" href="/search/filter/1.htm">filter</a><a class="tag" taget="_blank" href="/search/%E7%AE%80%E4%BD%93/1.htm">简体</a> <div>          今天调研一个任务,基于java的filter实现繁体到简体的转换,于是写了一个demo,给各位博友奉上,欢迎批评指正。          实现的思路是重载request的调取参数的几个方法,然后做下转换。           </div> </li> <li><a href="/article/1257.htm" title="android意图和意图监听器技术" target="_blank">android意图和意图监听器技术</a> <span class="text-muted">百合不是茶</span> <a class="tag" taget="_blank" href="/search/android/1.htm">android</a><a class="tag" taget="_blank" href="/search/%E6%98%BE%E7%A4%BA%E6%84%8F%E5%9B%BE/1.htm">显示意图</a><a class="tag" taget="_blank" href="/search/%E9%9A%90%E5%BC%8F%E6%84%8F%E5%9B%BE/1.htm">隐式意图</a><a class="tag" taget="_blank" href="/search/%E6%84%8F%E5%9B%BE%E7%9B%91%E5%90%AC%E5%99%A8/1.htm">意图监听器</a> <div>Intent是在activity之间传递数据;Intent的传递分为显示传递和隐式传递   显式意图:调用Intent.setComponent() 或 Intent.setClassName() 或 Intent.setClass()方法明确指定了组件名的Intent为显式意图,显式意图明确指定了Intent应该传递给哪个组件。   隐式意图;不指明调用的名称,根据设</div> </li> <li><a href="/article/1384.htm" title="spring3中新增的@value注解" target="_blank">spring3中新增的@value注解</a> <span class="text-muted">bijian1013</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a><a class="tag" taget="_blank" href="/search/%40Value/1.htm">@Value</a> <div>        在spring 3.0中,可以通过使用@value,对一些如xxx.properties文件中的文件,进行键值对的注入,例子如下: 1.首先在applicationContext.xml中加入:  <beans xmlns="http://www.springframework.</div> </li> <li><a href="/article/1511.htm" title="Jboss启用CXF日志" target="_blank">Jboss启用CXF日志</a> <span class="text-muted">sunjing</span> <a class="tag" taget="_blank" href="/search/log/1.htm">log</a><a class="tag" taget="_blank" href="/search/jboss/1.htm">jboss</a><a class="tag" taget="_blank" href="/search/CXF/1.htm">CXF</a> <div>1. 在standalone.xml配置文件中添加system-properties:     <system-properties>        <property name="org.apache.cxf.logging.enabled" value=&</div> </li> <li><a href="/article/1638.htm" title="【Hadoop三】Centos7_x86_64部署Hadoop集群之编译Hadoop源代码" target="_blank">【Hadoop三】Centos7_x86_64部署Hadoop集群之编译Hadoop源代码</a> <span class="text-muted">bit1129</span> <a class="tag" taget="_blank" href="/search/centos/1.htm">centos</a> <div>  编译必需的软件 Firebugs3.0.0 Maven3.2.3 Ant JDK1.7.0_67 protobuf-2.5.0 Hadoop 2.5.2源码包       Firebugs3.0.0   http://sourceforge.jp/projects/sfnet_findbug</div> </li> <li><a href="/article/1765.htm" title="struts2验证框架的使用和扩展" target="_blank">struts2验证框架的使用和扩展</a> <span class="text-muted">白糖_</span> <a class="tag" taget="_blank" href="/search/%E6%A1%86%E6%9E%B6/1.htm">框架</a><a class="tag" taget="_blank" href="/search/xml/1.htm">xml</a><a class="tag" taget="_blank" href="/search/bean/1.htm">bean</a><a class="tag" taget="_blank" href="/search/struts/1.htm">struts</a><a class="tag" taget="_blank" href="/search/%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F/1.htm">正则表达式</a> <div>struts2能够对前台提交的表单数据进行输入有效性校验,通常有两种方式: 1、在Action类中通过validatexx方法验证,这种方式很简单,在此不再赘述; 2、通过编写xx-validation.xml文件执行表单验证,当用户提交表单请求后,struts会优先执行xml文件,如果校验不通过是不会让请求访问指定action的。 本文介绍一下struts2通过xml文件进行校验的方法并说</div> </li> <li><a href="/article/1892.htm" title="记录-感悟" target="_blank">记录-感悟</a> <span class="text-muted">braveCS</span> <a class="tag" taget="_blank" href="/search/%E6%84%9F%E6%82%9F/1.htm">感悟</a> <div>再翻翻以前写的感悟,有时会发现自己很幼稚,也会让自己找回初心。   2015-1-11 1. 能在工作之余学习感兴趣的东西已经很幸福了; 2. 要改变自己,不能这样一直在原来区域,要突破安全区舒适区,才能提高自己,往好的方面发展; 3. 多反省多思考;要会用工具,而不是变成工具的奴隶; 4. 一天内集中一个定长时间段看最新资讯和偏流式博</div> </li> <li><a href="/article/2019.htm" title="编程之美-数组中最长递增子序列" target="_blank">编程之美-数组中最长递增子序列</a> <span class="text-muted">bylijinnan</span> <a class="tag" taget="_blank" href="/search/%E7%BC%96%E7%A8%8B%E4%B9%8B%E7%BE%8E/1.htm">编程之美</a> <div> import java.util.Arrays; import java.util.Random; public class LongestAccendingSubSequence { /** * 编程之美 数组中最长递增子序列 * 书上的解法容易理解 * 另一方法书上没有提到的是,可以将数组排序(由小到大)得到新的数组, * 然后求排序后的数组与原数</div> </li> <li><a href="/article/2146.htm" title="读书笔记5" target="_blank">读书笔记5</a> <span class="text-muted">chengxuyuancsdn</span> <a class="tag" taget="_blank" href="/search/%E9%87%8D%E5%A4%8D%E6%8F%90%E4%BA%A4/1.htm">重复提交</a><a class="tag" taget="_blank" href="/search/struts2%E7%9A%84token%E9%AA%8C%E8%AF%81/1.htm">struts2的token验证</a> <div>1、重复提交 2、struts2的token验证 3、用response返回xml时的注意 1、重复提交 (1)应用场景 (1-1)点击提交按钮两次。 (1-2)使用浏览器后退按钮重复之前的操作,导致重复提交表单。 (1-3)刷新页面 (1-4)使用浏览器历史记录重复提交表单。 (1-5)浏览器重复的 HTTP 请求。 (2)解决方法 (2-1)禁掉提交按钮 (2-2)</div> </li> <li><a href="/article/2273.htm" title="[时空与探索]全球联合进行第二次费城实验的可能性" target="_blank">[时空与探索]全球联合进行第二次费城实验的可能性</a> <span class="text-muted">comsci</span> <div>      二次世界大战前后,由爱因斯坦参加的一次在海军舰艇上进行的物理学实验 -费城实验   至今给我们大家留下很多迷团.....      关于费城实验的详细过程,大家可以在网络上搜索一下,我这里就不详细描述了      在这里,我的意思是,现在</div> </li> <li><a href="/article/2400.htm" title="easy connect 之 ORA-12154: TNS: 无法解析指定的连接标识符" target="_blank">easy connect 之 ORA-12154: TNS: 无法解析指定的连接标识符</a> <span class="text-muted">daizj</span> <a class="tag" taget="_blank" href="/search/oracle/1.htm">oracle</a><a class="tag" taget="_blank" href="/search/ORA-12154/1.htm">ORA-12154</a> <div>用easy connect连接出现“tns无法解析指定的连接标示符”的错误,如下: C:\Users\Administrator>sqlplus username/pwd@192.168.0.5:1521/orcl SQL*Plus: Release 10.2.0.1.0 – Production on 星期一 5月 21 18:16:20 2012 Copyright (c) 198</div> </li> <li><a href="/article/2527.htm" title="简单排序:归并排序" target="_blank">简单排序:归并排序</a> <span class="text-muted">dieslrae</span> <a class="tag" taget="_blank" href="/search/%E5%BD%92%E5%B9%B6%E6%8E%92%E5%BA%8F/1.htm">归并排序</a> <div> public void mergeSort(int[] array){ int temp = array.length/2; if(temp == 0){ return; } int[] a = new int[temp]; int</div> </li> <li><a href="/article/2654.htm" title="C语言中字符串的\0和空格" target="_blank">C语言中字符串的\0和空格</a> <span class="text-muted">dcj3sjt126com</span> <a class="tag" taget="_blank" href="/search/c/1.htm">c</a> <div>   \0 为字符串结束符,比如说:                       abcd (空格)cdefg; 存入数组时,空格作为一个字符占有一个字节的空间,我们</div> </li> <li><a href="/article/2781.htm" title="解决Composer国内速度慢的办法" target="_blank">解决Composer国内速度慢的办法</a> <span class="text-muted">dcj3sjt126com</span> <a class="tag" taget="_blank" href="/search/Composer/1.htm">Composer</a> <div>用法: 有两种方式启用本镜像服务: 1 将以下配置信息添加到 Composer 的配置文件 config.json 中(系统全局配置)。见“例1” 2 将以下配置信息添加到你的项目的 composer.json 文件中(针对单个项目配置)。见“例2” 为了避免安装包的时候都要执行两次查询,切记要添加禁用 packagist 的设置,如下 1 2 3 4 5 </div> </li> <li><a href="/article/2908.htm" title="高效可伸缩的结果缓存" target="_blank">高效可伸缩的结果缓存</a> <span class="text-muted">shuizhaosi888</span> <a class="tag" taget="_blank" href="/search/%E9%AB%98%E6%95%88%E5%8F%AF%E4%BC%B8%E7%BC%A9%E7%9A%84%E7%BB%93%E6%9E%9C%E7%BC%93%E5%AD%98/1.htm">高效可伸缩的结果缓存</a> <div>/** * 要执行的算法,返回结果v */ public interface Computable<A, V> { public V comput(final A arg); }   /** * 用于缓存数据 */ public class Memoizer<A, V> implements Computable<A, </div> </li> <li><a href="/article/3035.htm" title="三点定位的算法" target="_blank">三点定位的算法</a> <span class="text-muted">haoningabc</span> <a class="tag" taget="_blank" href="/search/c/1.htm">c</a><a class="tag" taget="_blank" href="/search/%E7%AE%97%E6%B3%95/1.htm">算法</a> <div>三点定位, 已知a,b,c三个顶点的x,y坐标 和三个点都z坐标的距离,la,lb,lc 求z点的坐标 原理就是围绕a,b,c 三个点画圆,三个圆焦点的部分就是所求 但是,由于三个点的距离可能不准,不一定会有结果, 所以是三个圆环的焦点,环的宽度开始为0,没有取到则加1 运行 gcc -lm test.c test.c代码如下 #include "stdi</div> </li> <li><a href="/article/3162.htm" title="epoll使用详解" target="_blank">epoll使用详解</a> <span class="text-muted">jimmee</span> <a class="tag" taget="_blank" href="/search/c/1.htm">c</a><a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/%E6%9C%8D%E5%8A%A1%E7%AB%AF%E7%BC%96%E7%A8%8B/1.htm">服务端编程</a><a class="tag" taget="_blank" href="/search/epoll/1.htm">epoll</a> <div>epoll - I/O event notification facility在linux的网络编程中,很长的时间都在使用select来做事件触发。在linux新的内核中,有了一种替换它的机制,就是epoll。相比于select,epoll最大的好处在于它不会随着监听fd数目的增长而降低效率。因为在内核中的select实现中,它是采用轮询来处理的,轮询的fd数目越多,自然耗时越多。并且,在linu</div> </li> <li><a href="/article/3289.htm" title="Hibernate对Enum的映射的基本使用方法" target="_blank">Hibernate对Enum的映射的基本使用方法</a> <span class="text-muted">linzx0212</span> <a class="tag" taget="_blank" href="/search/enum/1.htm">enum</a><a class="tag" taget="_blank" href="/search/Hibernate/1.htm">Hibernate</a> <div>  枚举   /** * 性别枚举 */ public enum Gender { MALE(0), FEMALE(1), OTHER(2); private Gender(int i) { this.i = i; } private int i; public int getI</div> </li> <li><a href="/article/3416.htm" title="第10章 高级事件(下)" target="_blank">第10章 高级事件(下)</a> <span class="text-muted">onestopweb</span> <a class="tag" taget="_blank" href="/search/%E4%BA%8B%E4%BB%B6/1.htm">事件</a> <div>index.html <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/</div> </li> <li><a href="/article/3543.htm" title="孙子兵法" target="_blank">孙子兵法</a> <span class="text-muted">roadrunners</span> <a class="tag" taget="_blank" href="/search/%E5%AD%99%E5%AD%90/1.htm">孙子</a><a class="tag" taget="_blank" href="/search/%E5%85%B5%E6%B3%95/1.htm">兵法</a> <div>始计第一 孙子曰: 兵者,国之大事,死生之地,存亡之道,不可不察也。 故经之以五事,校之以计,而索其情:一曰道,二曰天,三曰地,四曰将,五 曰法。道者,令民于上同意,可与之死,可与之生,而不危也;天者,阴阳、寒暑 、时制也;地者,远近、险易、广狭、死生也;将者,智、信、仁、勇、严也;法 者,曲制、官道、主用也。凡此五者,将莫不闻,知之者胜,不知之者不胜。故校 之以计,而索其情,曰</div> </li> <li><a href="/article/3670.htm" title="MySQL双向复制" target="_blank">MySQL双向复制</a> <span class="text-muted">tomcat_oracle</span> <a class="tag" taget="_blank" href="/search/mysql/1.htm">mysql</a> <div>本文包括: 主机配置 从机配置 建立主-从复制 建立双向复制   背景 按照以下简单的步骤: 参考一下: 在机器A配置主机(192.168.1.30) 在机器B配置从机(192.168.1.29) 我们可以使用下面的步骤来实现这一点   步骤1:机器A设置主机 在主机中打开配置文件 , </div> </li> <li><a href="/article/3797.htm" title="zoj 3822 Domination(dp)" target="_blank">zoj 3822 Domination(dp)</a> <span class="text-muted">阿尔萨斯</span> <a class="tag" taget="_blank" href="/search/Mina/1.htm">Mina</a> <div> 题目链接:zoj 3822 Domination 题目大意:给定一个N∗M的棋盘,每次任选一个位置放置一枚棋子,直到每行每列上都至少有一枚棋子,问放置棋子个数的期望。 解题思路:大白书上概率那一张有一道类似的题目,但是因为时间比较久了,还是稍微想了一下。dp[i][j][k]表示i行j列上均有至少一枚棋子,并且消耗k步的概率(k≤i∗j),因为放置在i+1~n上等价与放在i+1行上,同理</div> </li> </ul> </div> </div> </div> <div> <div class="container"> <div class="indexes"> <strong>按字母分类:</strong> <a href="/tags/A/1.htm" target="_blank">A</a><a href="/tags/B/1.htm" target="_blank">B</a><a href="/tags/C/1.htm" target="_blank">C</a><a href="/tags/D/1.htm" target="_blank">D</a><a href="/tags/E/1.htm" target="_blank">E</a><a href="/tags/F/1.htm" target="_blank">F</a><a href="/tags/G/1.htm" target="_blank">G</a><a href="/tags/H/1.htm" target="_blank">H</a><a href="/tags/I/1.htm" target="_blank">I</a><a href="/tags/J/1.htm" target="_blank">J</a><a href="/tags/K/1.htm" target="_blank">K</a><a href="/tags/L/1.htm" target="_blank">L</a><a href="/tags/M/1.htm" target="_blank">M</a><a href="/tags/N/1.htm" target="_blank">N</a><a href="/tags/O/1.htm" target="_blank">O</a><a href="/tags/P/1.htm" target="_blank">P</a><a href="/tags/Q/1.htm" target="_blank">Q</a><a href="/tags/R/1.htm" target="_blank">R</a><a href="/tags/S/1.htm" target="_blank">S</a><a href="/tags/T/1.htm" target="_blank">T</a><a href="/tags/U/1.htm" target="_blank">U</a><a href="/tags/V/1.htm" target="_blank">V</a><a href="/tags/W/1.htm" target="_blank">W</a><a href="/tags/X/1.htm" target="_blank">X</a><a href="/tags/Y/1.htm" target="_blank">Y</a><a href="/tags/Z/1.htm" target="_blank">Z</a><a href="/tags/0/1.htm" target="_blank">其他</a> </div> </div> </div> <footer id="footer" class="mb30 mt30"> <div class="container"> <div class="footBglm"> <a target="_blank" href="/">首页</a> - <a target="_blank" href="/custom/about.htm">关于我们</a> - <a target="_blank" href="/search/Java/1.htm">站内搜索</a> - <a target="_blank" href="/sitemap.txt">Sitemap</a> - <a target="_blank" href="/custom/delete.htm">侵权投诉</a> </div> <div class="copyright">版权所有 IT知识库 CopyRight © 2000-2050 E-COM-NET.COM , All Rights Reserved. <!-- <a href="https://beian.miit.gov.cn/" rel="nofollow" target="_blank">京ICP备09083238号</a><br>--> </div> </div> </footer> <!-- 代码高亮 --> <script type="text/javascript" src="/static/syntaxhighlighter/scripts/shCore.js"></script> <script type="text/javascript" src="/static/syntaxhighlighter/scripts/shLegacy.js"></script> <script type="text/javascript" src="/static/syntaxhighlighter/scripts/shAutoloader.js"></script> <link type="text/css" rel="stylesheet" href="/static/syntaxhighlighter/styles/shCoreDefault.css"/> <script type="text/javascript" src="/static/syntaxhighlighter/src/my_start_1.js"></script> </body> </html>