# configmanager **Repository Path**: jx_service/configmanager ## Basic Information - **Project Name**: configmanager - **Description**: No description available - **Primary Language**: Unknown - **License**: GPL-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2021-11-12 - **Last Updated**: 2021-11-12 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Ant Design Pro This project is initialized with [Ant Design Pro](https://pro.ant.design). Follow is the quick guide for how to use. ## Environment Prepare Install `node_modules`: ```bash npm install ``` or ```bash yarn ``` ## Provided Scripts Ant Design Pro provides some useful script to help you quick start and build with web project, code style check and test. Scripts provided in `package.json`. It's safe to modify or add additional script: ### Start project ```bash npm start ``` ### Build project ```bash npm run build ``` ### Check code style ```bash npm run lint ``` You can also use script to auto fix some lint error: ```bash npm run lint:fix ``` ### Test code ```bash npm test ``` ## More You can view full document on our [official website](https://pro.ant.design). And welcome any feedback in our [github](https://github.com/ant-design/ant-design-pro). ###增加api接口 /src/services 目录下 建立configserver的目录 api.ts 中定义了http方法 typings.d.ts中定义了返回的数据 # React的基础知识 ### 1. React.FC React.FC<>的在typescript使用的一个泛型, FC就是FunctionComponent的缩写,是函数组件, 在这个泛型里面可以使用useState ### 2. 基础HOOK + useState ```javascript const [state, setState] = useState(initialState); ``` 返回一个 state,以及更新 state 的函数。 在初始渲染期间,返回的状态 (state) 与传入的第一个参数 (initialState) 值相同。 setState 函数用于更新 state。它接收一个新的 state 值并将组件的一次重新渲染加入队列。 ```javascript setState(newState); ``` 在后续的重新渲染中,useState 返回的第一个值将始终是更新后最新的 state。 >React 会确保 setState 函数的标识是稳定的,并且不会在组件重新渲染时发生变化。这就是为什么可以安全地从 useEffect 或 useCallback 的依赖列表中省略 setState。 函数式更新 如果新的 state 需要通过使用先前的 state 计算得出,那么可以将函数传递给 setState。该函数将接收先前的 state,并返回一个更新后的值。下面的计数器组件示例展示了 setState 的两种用法: ```javascript function Counter({initialCount}) { const [count, setCount] = useState(initialCount); return ( <> Count: {count} > ); } ``` “+” 和 “-” 按钮采用函数式形式,因为被更新的 state 需要基于之前的 state。但是“重置”按钮则采用普通形式,因为它总是把 count 设置回初始值。 如果你的更新函数返回值与当前 state 完全相同,则随后的重渲染会被完全跳过。 >注意:与 class 组件中的 setState 方法不同,useState 不会自动合并更新对象。你可以用函数式的 setState 结合展开运算符来达到合并更新对象的效果。 >```javascript >const [state, setState] = useState({}); >setState(prevState => { > // 也可以使用 Object.assign > return {...prevState, ...updatedValues}; >}); >``` >useReducer 是另一种可选方案,它更适合用于管理包含多个子值的 state 对象。 + useRef ```javascript const refContainer = useRef(initialValue); ``` useRef 返回一个可变的 ref 对象,其 .current 属性被初始化为传入的参数(initialValue)。返回的 ref 对象在组件的整个生命周期内持续存在。 一个常见的用例便是命令式地访问子组件: ```javascript function TextInputWithFocusButton() { const inputEl = useRef(null); const onButtonClick = () => { // `current` 指向已挂载到 DOM 上的文本输入元素 inputEl.current.focus(); }; return ( <> > ); } ``` 本质上,useRef 就像是可以在其 .current 属性中保存一个可变值的“盒子”。 你应该熟悉 ref 这一种访问 DOM 的主要方式。如果你将 ref 对象以 ```
``` 形式传入组件,则无论该节点如何改变,React 都会将 ref 对象的 .current 属性设置为相应的 DOM 节点。 然而,useRef() 比 ref 属性更有用。它可以很方便地保存任何可变值,其类似于在 class 中使用实例字段的方式。 这是因为它创建的是一个普通 Javascript 对象。而 useRef() 和自建一个 {current: ...} 对象的唯一区别是,useRef 会在每次渲染时返回同一个 ref 对象。 请记住,当 ref 对象内容发生变化时,useRef 并不会通知你。变更 .current 属性不会引发组件重新渲染。如果想要在 React 绑定或解绑 DOM 节点的 ref 时运行某些代码,则需要使用回调 ref 来实现。 ## AntD Pro的处理 ### 添加500或者504等网络错误返回的处理 + api的定义在 src/services/configserver/api.ts 示例如下: ``` javascript /** 获取规则列表 POST /api/list/hosts */ export async function listHostsInfo( data?: { /** 当前的页码 */ current?: number; /** 页面的容量 */ pageSize?: number; }, // 加了排序 sort?: object, options?: { [key: string]: any }, ) { console.log('POST API request:/api/list/hosts,value=', data) return request