React-Redux类似任务管理示例

概述:

基于React、Redux,参考官方示例,实现组件状态管理。

图示:
React-Redux类似任务管理示例_第1张图片

文件目录:

│  .babelrc
│  .eslintrc
│  package.json
│
├─config
│      webpack.config.js
│      webpack.production.config.js
│
├─public
└─src
    ├─company
    │  │  index.js
    │  │  index.tmpl.html
    │  │
    │  ├─actions
    │  │      items.js
    │  │      visible.js
    │  │
    │  ├─component
    │  │      Create.js
    │  │      Error.js
    │  │      Footer.js
    │  │      Header.js
    │  │      index.js
    │  │      Item.js
    │  │      ItemList.js
    │  │      Link.js
    │  │      RowLink.js
    │  │      style.js
    │  │      Title.js
    │  │
    │  ├─container
    │  │      CreateItem.js
    │  │      FilterLink.js
    │  │      VisibleItemList.js
    │  │
    │  └─reducers
    │          filter.js
    │          index.js
    │          items.js
    │
    └─static
        ├─css
        │      common.css
        │
        └─images
                180403.png
                favicon.png

package.json

{
  "name": "demos",
  "version": "1.0.0",
  "description": "demos",
  "main": "index.js",
  "scripts": {
    "eslint": "eslint --ext .js src",
    "eslint-fix": "eslint --fix src",
    "deves": "webpack-dev-server --open --mode development --config ./config/webpack.config.js",
    "build": "webpack --mode production --progress --config ./config/webpack.production.config.js"
  },
  "author": "HeJun",
  "license": "ISC",
  "repository": {
    "type": "git",
    "url": "git.nsecn.com"
  },
  "devDependencies": {
    "autoprefixer": "^8.4.1",
    "babel-core": "^6.26.0",
    "babel-loader": "^7.1.4",
    "babel-plugin-react-transform": "^3.0.0",
    "babel-preset-env": "^1.6.1",
    "babel-preset-react": "^6.24.1",
    "babel-standalone": "^6.26.0",
    "babel-plugin-transform-object-rest-spread": "^6.26.0",
    "babel-eslint": "^8.2.2",
    "babel-polyfill": "^6.26.0",
    "clean-webpack-plugin": "^0.1.19",
    "css-loader": "^0.28.11",
    "extract-text-webpack-plugin": "^4.0.0-beta.0",
    "file-loader": "^1.1.11",
    "html-loader": "^0.5.5",
    "html-webpack-plugin": "^3.1.0",
    "lodash": "^4.17.5",
    "postcss-loader": "^2.1.4",
    "react-transform-hmr": "^1.0.4",
    "style-loader": "^0.20.3",
    "uglifyjs-webpack-plugin": "^1.2.4",
    "url-loader": "^1.0.1",
    "webpack": "~4.5.0",
    "webpack-cli": "^2.0.13",
    "webpack-dev-server": "^3.1.1",
    "zip-webpack-plugin": "^3.0.0",
    "moment": "^2.22.0",
    "eslint": "^4.19.1",
    "eslint-plugin-import": "^2.10.0",
    "eslint-plugin-react": "^7.7.0"
  },
  "dependencies": {
    "prop-types": "^15.6.1",
    "react": "^16.2.0",
    "react-dom": "^16.2.0",
    "redux": "^4.0.0",
    "react-redux": "^5.0.7",
    "react-router-dom": "^4.2.2"
  }
}

.babelrc

{
  presets: ["env", "react"],
  "env": {
    "development": {
      "plugins": [
        [
          "react-transform", {
            "transforms": [
              {
                "transform": "react-transform-hmr",
                "imports": ["react"],
                "locals": ["module"]
              }
            ]
          }
        ],
        ["transform-object-rest-spread", {
          "useBuiltIns": true
        }]
      ]
    }
  }
}

webpack.config.js

const path = require('path');
const webpack = require('webpack');
const autoprefixer = require('autoprefixer');
const HtmlWebpackPlugin = require('html-webpack-plugin');

const base = path.join(__dirname, '..', 'src');
const dist = path.join(__dirname, '..', 'public');
const favicon = path.join(base, 'static', 'images', 'favicon.png');

// 常量
const company = 'company';

module.exports = {
    // 入口文件
    entry: {
        company: ['babel-polyfill', path.join(base, company, 'index.js')]
    },
    // 抽取公共JS
    optimization: {
        splitChunks: {
            cacheGroups: {
                vendor: {
                    test: /[\\/]node_modules[\\/]/,
                    name: 'common',
                    priority: 10,
                    chunks: 'all'
                }
            }
        }
    },
    output: {
        // 打包后文件路径
        path: path.join(dist),
        // 打包后输出文件
        filename: 'bundle.[name].[hash:8].js'
    },
    // 发布时设置为null
    devtool: 'eval-source-map',
    performance: {
        hints: false
    },
    devServer: {
        // 本地服务器加载的目录
        contentBase: path.join(dist),
        port: 8000,
        // 不跳转
        historyApiFallback: true,
        // 实时刷新
        inline: true
    },
    module: {
        rules: [
            {
                test: /(\.jsx|\.js)$/,
                use: {
                    loader: 'babel-loader'
                },
                exclude: /node_modules/
            },
            {
                test: /\.html$/,
                use: {
                    loader: 'html-loader?minimize=false'
                }
            },
            {
                test: /\.(png|jpe?g|gif|svg)$/,
                use: {
                    loader: 'url-loader?limit=1024&name=images/[hash:12].[ext]'
                }
            },
            {
                test: /\.css$/,
                use: [
                    {
                        loader: 'style-loader'
                    },
                    {
                        // 启用CSS模块
                        loader: 'css-loader',
                        options: {
                            module: true
                        }
                    },
                    {
                        // CSS类自动名称
                        loader: 'postcss-loader',
                        options: {
                            plugins: [
                                autoprefixer
                            ]
                        }
                    }
                ]
            }
        ]
    },
    plugins: [
        new webpack.BannerPlugin('DEMO COPYRIGHT'),
        new HtmlWebpackPlugin({
            chunks: ['common', company],
            template: path.join(base, company, 'index.tmpl.html'),
            filename: 'index.html',
            favicon: favicon
        }),
        // 热加载模块插件
        new webpack.HotModuleReplacementPlugin()
    ]
}

webpack.production.config.js

const path = require('path');
const moment = require('moment');
const webpack = require('webpack');
const autoprefixer = require('autoprefixer');
const HtmlWebpackPlugin = require('html-webpack-plugin');
const UglifyJsPlugin = require('uglifyjs-webpack-plugin');
const ExtractTextPlugin = require('extract-text-webpack-plugin');
const CleanWebpackPlugin = require("clean-webpack-plugin");
const ZipPlugin = require('zip-webpack-plugin');

const base = path.join(__dirname, '..', 'src');
const dist = path.join(__dirname, '..', 'public');
const favicon = path.join(base, 'static', 'images', 'favicon.png');

// 常量
const company = 'company';

module.exports = {
    // 入口文件
    entry: {
        company: ['babel-polyfill', path.join(base, company, 'index.js')]
    },
    // 抽取公共JS
    optimization: {
        splitChunks: {
            cacheGroups: {
                vendor: {
                    test: /[\\/]node_modules[\\/]/,
                    name: 'common',
                    priority: 10,
                    chunks: 'all'
                }
            }
        }
    },
    output: {
        // 打包后文件路径
        path: path.join(dist),
        // 打包后输出文件
        filename: 'bundle.[name].[hash:8].js'
    },
    // 发布时设置为null
    devtool: 'null',
    performance: {
        hints: false
    },
    module: {
        rules: [
            {
                test: /(\.jsx|\.js)$/,
                use: {
                    loader: 'babel-loader'
                },
                exclude: /node_modules/
            },
            {
                test: /\.html$/,
                use: {
                    // 压缩HTML设置true
                    loader: 'html-loader?minimize=false'
                }
            },
            {
                test: /\.(png|jpe?g|gif|svg)$/,
                use: {
                    loader: 'url-loader?limit=1024&name=images/[hash:12].[ext]'
                }
            },
            {
                test: /\.css$/,
                use: [
                    {
                        loader: 'style-loader'
                    },
                    {
                        // 启用CSS模块
                        loader: 'css-loader',
                        options: {
                            module: true
                        }
                    },
                    {
                        // CSS类自动名称
                        loader: 'postcss-loader',
                        options: {
                            plugins: [
                                autoprefixer
                            ]
                        }
                    }
                ]
            }
        ]
    },
    plugins: [
        new webpack.BannerPlugin('DEMO COPYRIGHT'),
        new HtmlWebpackPlugin({
            chunks: ['common', company],
            template: path.join(base, company, 'index.tmpl.html'),
            filename: 'index.html',
            favicon: favicon
        }),
        // 热加载模块插件
        new webpack.HotModuleReplacementPlugin(),
        // 为组建分配ID
        new webpack.optimize.OccurrenceOrderPlugin(),
        // 压缩JS
        new UglifyJsPlugin({
            uglifyOptions: {
                compress: {
                    drop_console: true
                }
            }
        }),
        // 分离CSS[存在BUG]
        new ExtractTextPlugin('[name].[hash:10].css'),
        // 清除文件
        new CleanWebpackPlugin(['*'], {
            root: path.join(dist)
        }),
        // ZIP打包
        new ZipPlugin({
            path: path.join(dist),
            filename: 'Release-' + moment().format('YYHHmmss') + '.zip'
        })
    ]
}

common.css

/*!
 * Hon by 2018-05-02
 */
body {
    color: #526475;
    margin: 0px;
    padding: 0px;
    font-family: Monospaced Number, Chinese Quote, -apple-system, BlinkMacSystemFont, Segoe UI, Roboto, PingFang SC, Hiragino Sans GB, Microsoft YaHei, Helvetica Neue, Helvetica, Arial, sans-serif;
    font-size: 16px;
    font-weight: 300;
    width: 100%;
    background-color: #ffffff;
}

h1, h2, h3, h4, h5, h6 {
    color: #526475;
    font-weight: 300;
    display: block;
    margin-bottom: 20px;
    margin-top: 0px;
    white-space: nowrap;
}

h1 {
    font-size: 36px;
    line-height: 50px;
}

h2 {
    font-size: 32px;
    line-height: 46px;
}

h3 {
    font-size: 28px;
    line-height: 42px;
}

h4 {
    font-size: 24px;
    line-height: 38px;
}

h5 {
    font-size: 20px;
    line-height: 34px;
}

h6 {
    font-size: 16px;
    line-height: 30px;
}

.btn {
    font-family: 'Open Sans';
    font-size: 16px;
    -webkit-touch-callout: none;
    -webkit-user-select: none;
    -moz-user-select: none;
    -ms-user-select: none;
    text-align: center;
    text-decoration: none !important;
    line-height: 36px;
    margin: 5px;
    padding: 0 20px;
    display: inline-block;
    border-radius: 3px;
    transition: all 0.3s;
    color: #ffffff;
    border: 1px solid #09a0f6;
    white-space: nowrap;
    background-color: #09a0f6;
    outline: 0px;
    cursor: pointer;
}

.btn:hover {
    text-decoration: none;
    opacity: 0.8;
}

.btn:active {
    background-color: #0077e6;
    border-color: #0077e6;
    opacity:.8;
    -webkit-animation: buttonEffect .4s;
    animation: buttonEffect .4s;
}

.disable {
    font-family: 'Open Sans';
    font-size: 14px;
    -webkit-touch-callout: none;
    -webkit-user-select: none;
    -moz-user-select: none;
    -ms-user-select: none;
    margin: 5px;
    border-radius: 3px;
    transition: all 0.3s;
    color: #777777;
    background-color: #f7f7f7;
    white-space: nowrap;
    border: 1px solid #d9d9d9;
    outline: 0px;
    cursor: not-allowed;
}

.btn-small {
    font-size: 14px !important;
    line-height: 26px !important;
    padding: 0 12px !important;
}

.btn-clean {
    margin: 0px;
}

.form-input[type="text"], .form-input[type="password"], .form-input[type="number"], .form-input[type="email"] {
    font-size: 16px;
    display: inline-block;
    width: 100%;
    transition: all 0.3s;
    color: #526475;
    padding-left: 10px;
    padding-right: 10px;
    border: 1px solid #d1e1e8;
    border-radius: 3px;
    outline: 0px;
    box-sizing: border-box;
    height: 38px;
}

.form-input[type="text"]:focus, .form-input[type="password"]:focus, .form-input[type="number"]:focus, .form-input[type="email"]:focus {
    border: 1px solid #09a0f6;
}

.form-input[type="date"] {
    font-size: 16px;
    display: inline-block;
    width: 100%;
    transition: all 0.3s;
    color: #526475;
    padding: 10px;
    border: 1px solid #d1e1e8;
    border-radius: 5px;
    outline: 0px;
    box-sizing: border-box;
    width: auto !important;
    height: 40px;
}

.form-input[type="date"]:focus {
    border: 1px solid #09a0f6;
}

.form-input[disabled] {
    font-size: 16px;
    display: inline-block;
    width: 100%;
    transition: all 0.3s;
    color: #526475;
    padding: 10px;
    border: 1px solid #d1e1e8;
    border-radius: 5px;
    outline: 0px;
    box-sizing: border-box;
    cursor: not-allowed;
    background-color: #d1e1e8;
    height: 40px;
}

.form-input[disabled]:focus {
    border: 1px solid #09a0f6;
}

.form-input[type="submit"], .form-input[type="button"] {
    font-size: 16px;
    -webkit-touch-callout: none;
    -webkit-user-select: none;
    -khtml-user-select: none;
    -moz-user-select: none;
    -ms-user-select: none;
    outline: none;
    text-align: center;
    text-decoration: none !important;
    line-height: 28px;
    margin-left: 5px;
    margin-right: 5px;
    margin: 5px;
    padding: 5px 25px;
    display: inline-block;
    cursor: pointer;
    border-radius: 3px;
    transition: all 0.3s;
    color: #ffffff;
    background-color: #09a0f6;
    border: 0px;
}

.form-input[type="submit"]:hover, .form-input[type="button"]:hover {
    text-decoration: none;
}

.form-input[type="submit"]:hover, .form-input[type="button"]:hover {
    opacity: 0.8;
}

.form-select {
    font-size: 16px;
    display: inline-block;
    width: 100%;
    transition: all 0.3s;
    color: #526475;
    padding: 10px;
    margin: 5px;
    border: 1px solid #d1e1e8;
    border-radius: 5px;
    outline: 0px;
    box-sizing: border-box;
    padding-top: 6px;
    height: 40px;
    background-color: #ffffff;
}

.form-select:focus {
    border: 1px solid #09a0f6;
}

.form-textarea {
    font-size: 16px;
    display: inline-block;
    width: 100%;
    transition: all 0.3s;
    color: #526475;
    padding: 10px;
    margin: 5px;
    border: 1px solid #d1e1e8;
    border-radius: 5px;
    outline: 0px;
    box-sizing: border-box;
    resize: vertical;
}

.form-textarea:focus {
    border: 1px solid #09a0f6;
}

@media (max-width: 960px) {
    .grid {
        width: 94%;
    }
}

.row {
    display: inline-block;
    width: 100%;
    margin: 10px 0px;
}

.row:after {
    content: " ";
    clear: both;
    display: table;
    line-height: 0;
}

.col-1 {
    width: 6.33%;
    display: inline-block;
    vertical-align: top;
    float: left;
    padding: 1%;
}

.col-2 {
    width: 14.66%;
    display: inline-block;
    vertical-align: top;
    float: left;
    padding: 1%;
}

.col-3 {
    width: 22.99%;
    display: inline-block;
    vertical-align: top;
    float: left;
    padding: 1%;
}

.col-4 {
    width: 31.33%;
    display: inline-block;
    vertical-align: top;
    float: left;
    padding: 1%;
    white-space: nowrap;
}

.col-5 {
    width: 39.66%;
    display: inline-block;
    vertical-align: top;
    float: left;
    padding: 1%;
}

.col-6 {
    width: 47.99%;
    display: inline-block;
    vertical-align: top;
    float: left;
    padding: 1%;
}

.col-7 {
    width: 56.33%;
    display: inline-block;
    vertical-align: top;
    float: left;
    padding: 1%;
}

.col-8 {
    width: 64.66%;
    display: inline-block;
    vertical-align: top;
    float: left;
    padding: 1%;
}

.col-9 {
    width: 72.99%;
    display: inline-block;
    vertical-align: top;
    float: left;
    padding: 1%;
}

.col-10 {
    width: 81.33%;
    display: inline-block;
    vertical-align: top;
    float: left;
    padding: 1%;
}

.col-11 {
    width: 89.66%;
    display: inline-block;
    vertical-align: top;
    float: left;
    padding: 1%;
}

.col-12 {
    width: 97.99%;
    display: inline-block;
    vertical-align: top;
    float: left;
    padding: 1%;
}

@media (max-width: 400px) {
    .col-1 {
        width: 98%;
    }

    .col-2 {
        width: 98%;
    }

    .col-3 {
        width: 98%;
    }

    .col-4 {
        width: 98%;
    }

    .col-5 {
        width: 98%;
    }

    .col-6 {
        width: 98%;
    }

    .col-7 {
        width: 98%;
    }

    .col-8 {
        width: 98%;
    }

    .col-9 {
        width: 98%;
    }

    .col-10 {
        width: 98%;
    }

    .col-11 {
        width: 98%;
    }

    .col-12 {
        width: 98%;
    }
}

.table {
    display: table;
    width: 100%;
    border-width: 0px;
    border-collapse: collapse;
    color: #526475;
    margin-top: 0px;
    margin-bottom: 20px;
}

.table thead tr th {
    font-weight: 500;
    border: 1px solid #d1e1e8;
    padding: 8px 12px;
    background-color: #fcfcfc;
    border-left: none;
    border-right: none;
    white-space: nowrap;
    text-align: left;
}

.table tr td {
    border: 1px solid #d1e1e8;
    border-left: none;
    border-right: none;
    padding: 10px;
    white-space: nowrap;
}

.center {
    text-align: center;
}

.alert {
    display: block;
    font-size: 16px;
    text-align: left;
    padding: 6px 10px;
    margin-top: 5px;
    border-radius: 2px;
    border: 1px solid;
    background-color: #E1F5FE;
    color: #03A9F4;
    border-color: #03A9F4;
}

.alert a {
    text-decoration: none;
    font-weight: normal;
}

.alert-error {
    color: #D32F2F;
    background-color: #FFEBEE;
    border-color: #FFEBEE;
}

.alert-warning {
    background-color: #FFF8E1;
    color: #FF8F00;
    border-color: #FFC107;
}

.alert-done {
    background-color: #E8F5E9;
    color: #388E3C;
    border-color: #4CAF50;
}

.logo {
    background-image: url("../images/180403.png");
    background-size: 35px 35px;
    background-repeat: no-repeat;
    width: 35px;
    height: 35px;
    display: inline-block;
    margin-right: 8px;
    margin-bottom: -5px;
    overflow: hidden;
}

.footer {
    font-size: 12px;
    color: #999999;
    text-align: center;
    line-height: 50px;
    height: 50px;
    margin: 0px;
    overflow: hidden;
    position: relative;
}

.footer a {
    color: #777777;
    text-decoration: none;
}

.footer a:hover {
    color: #f54343;
}



.block {
    margin: 20px auto;
    width: 350px;
    padding: 20px 0px;
    border: 1px solid #cccccc;
    box-shadow: 5px 5px 3px #cccccc;
}

.block .having {
    font-size: 20px;
    color: #f54343;
    font-weight: bold;
    padding-right: 10px;
}

.bood {
    background-color: #20232a;
    width: 56px;
    height: 56px;
    border-radius: 50%;
    display: inline-block;
    float: left;
    margin-top: -10px;
    margin-left: -26px;
}

.gap {
    padding-left: 45px;
}

images
React-Redux类似任务管理示例_第2张图片

图片描述

index.tmpl.html




    
    REDUX COMPY


index.js

// 入口
import React from 'react';
import {render} from 'react-dom';
import {createStore} from 'redux';
import {Provider} from 'react-redux';

import Index from './component/index';
import reducer from './reducers';

const store = createStore(reducer);

render(
    
        
    ,
    document.querySelector('#root')
);

index.js

import React from 'react';
import style from './style';
import Title from './Title';
import CreateItem from '../container/CreateItem';
import VisibleItemList from '../container/VisibleItemList';
import RowLink from './RowLink';
import Footer from './Footer';

const title = 'COMPANY MANAGEMENT';

// 组装UI组件
const Index = () => (
    
<CreateItem/> <VisibleItemList/> <RowLink/> </div> <div className={style["col-3"]}></div> <div className={style["col-12"]}> <Footer/> </div> </div> ); export default Index;</code></pre> <p>style.js</p> <pre><code>const style = require('../../static/css/common.css'); // CSS模块 export default style;</code></pre> <p>Create.js</p> <pre><code>import React from 'react'; import style from './style'; import Error from './Error'; // 添加组件 const Create = ({createError, addItem, resetCreate}) => { let input; return ( <div className={style.row}> <form onSubmit={(e) => { e.preventDefault(); input.focus(); addItem(input.value.trim()); }}> <div className={style["col-8"]}> <input type={'text'} className={style["form-input"]} placeholder="请输入公司名称" ref={node => { input = node }} /> <Error error={createError}/> </div> <div className={style["col-4"]} style={{marginTop: '-5px'}}> <button type={'submit'} className={`${style.btn} ${style["btn-clean"]}`}> 添加 </button> <button type={'button'} className={`${style.btn}`} onClick={(e) => { input.value = ''; resetCreate(); }} >重置 </button> </div> </form> </div> ) } export default Create;</code></pre> <p>Error.js</p> <pre><code>import React from 'react'; import style from './style'; // 错误提示 const Error = ({error}) => { if (error) { return ( <div className={`${style.alert} ${style["alert-error"]}`}> {error} </div> ) } return ( <span></span> ) } export default Error;</code></pre> <p>Footer.js</p> <pre><code>import React from 'react'; import style from './style'; // 页脚组件 const Footer = () => ( <div> <div className={style.footer}>@2018 <a href="/">XXX</a> 版权所有 京A2-20186XXX号</div> </div> ); export default Footer;</code></pre> <p>Header.js</p> <pre><code>import React from 'react'; // 表头组件 const Header = () => ( <thead> <tr> <th>名称 NAME</th> <th style={{textAlign: 'center'}}>操作 OPERATION</th> </tr> </thead> ); export default Header;</code></pre> <p>Item.js</p> <pre><code>import React from 'react'; import style from './style'; import Error from './Error'; import {connect} from 'react-redux'; import {saveItem} from '../actions/items'; const Item = ({toggleItem, editItem, removeItem, cancelEdit, dispatch, ...item}) => { if (item.isEditing) { let editInput; return ( <tr> <td> <input className={style["form-input"]} type="text" defaultValue={item.text} ref={node => editInput = node} autoFocus="autofocus" /> <Error error={item.error}/> </td> <td className={style.center}> <button className={`${style.btn} ${style["btn-small"]}`} onClick={(e) => { e.preventDefault(); editInput.focus(); const it = Object.assign({}, {...item}, {text: editInput.value.trim()}); // 调用 dispatch dispatch(saveItem(it)); }} >保存 </button> <button className={`${style.btn} ${style["btn-small"]}`} onClick={(e) => { e.preventDefault(); cancelEdit(item.id); }} >取消 </button> </td> </tr> ); } let itemStyle = { color: item.isCompleted ? 'green' : 'red', textDecoration: item.isCompleted ? 'line-through' : 'none', cursor: 'pointer' } return ( <tr> <td onClick={toggleItem} style={itemStyle}> {item.text} </td> <td className={style.center}> <button className={`${style.btn} ${style["btn-small"]}`} onClick={(e) => { e.preventDefault(); editItem(item.id); }} >编辑 </button> <button className={`${style.btn} ${style["btn-small"]}`} onClick={(e) => { e.preventDefault(); removeItem(item.id); }} >删除 </button> </td> </tr> ); }; export default connect()(Item);</code></pre> <p>ItemList.js</p> <pre><code>import React from 'react'; import style from './style'; import Header from './Header'; import Item from './Item'; // 列表组件 const ItemList = ({data, toggleItem, editItem, removeItem, cancelEdit}) => ( <table className={style.table}> <Header/> <tbody> { data.items.map(item => ( <Item key={item.id} {...item} toggleItem={() => toggleItem(item.id)} editItem={() => editItem(item.id)} removeItem={() => removeItem(item.id)} cancelEdit={() => cancelEdit(item.id)} /> )) } </tbody> </table> ); export default ItemList;</code></pre> <p>Link.js</p> <pre><code>import React from 'react'; import style from './style'; // UI - 三个参数[是否激活,按钮内容,点击事件] const Link = ({active, children, onClick}) => { if (active) { return ( <button className={`${style.disable} ${style["btn-small"]}`}> {children} </button> ) } return ( <button className={`${style.btn} ${style["btn-small"]}`} onClick={e => { e.preventDefault(); onClick(); }}> {children} </button> ) } export default Link;</code></pre> <p>RowLink.js</p> <pre><code>import React from 'react'; import FilterLink from '../container/FilterLink'; // UI const RowLink = () => ( <div> <span style={{marginLeft: '5px'}}></span> <FilterLink filter="SHOW_ALL"> 全部 </FilterLink> <FilterLink filter="SHOW_ACTIVE"> 激活 </FilterLink> <FilterLink filter="SHOW_COMPLETED"> 完成 </FilterLink> <a href={'counter.html'} style={{textDecoration: 'none', fontSize: '14px', marginLeft: '30px', whiteSpace: 'nowrap', color: '#8B668B'}}> 计数器 </a> </div> ); export default RowLink;</code></pre> <p>Title.js</p> <pre><code>import React from 'react'; import style from './style'; // 标题组件 const Title = ({title}) => ( <h2><span className={style.logo}></span>{title}</h2> ); export default Title;</code></pre> <p>CreateItem.js</p> <pre><code>import {connect} from 'react-redux'; import {addItem, resetCreate} from '../actions/items'; import Create from '../component/Create'; // 定义输入逻辑 - 将state映射到UI组件的参数 const mapStateToProps = (state) => { return { createError: state.data.createError } }; // 定义输出逻辑 - UI操作到dispatch的映射 const mapDispatchToProps = dispatch => { return { addItem: (text) => { // 触发Action dispatch(addItem(text)); }, resetCreate: () => { dispatch(resetCreate()); } } }; // 从UI组件生成容器组件 const CreateItem = connect( // 不需要映射参数[null或() => ({})] mapStateToProps, mapDispatchToProps )(Create); export default CreateItem;</code></pre> <p>FilterLink.js</p> <pre><code>import {connect} from 'react-redux'; import {visible} from '../actions/visible'; import Link from '../component/Link'; // 定义输入逻辑 - 将state映射到UI组件的参数 const mapStateToProps = (state, props) => { return { active: props.filter === state.filter } }; // 定义输出逻辑 - UI操作到dispatch的映射 const mapDispatchToProps = (dispatch, props) => { return { onClick: () => { dispatch(visible(props.filter)); } } }; // 从UI组件生成容器组件 const FilterLink = connect( mapStateToProps, mapDispatchToProps )(Link); export default FilterLink;</code></pre> <p>VisibleItemList.js</p> <pre><code>import {connect} from 'react-redux'; import {toggleItem, editItem, removeItem, cancelEdit} from '../actions/items'; import ItemList from '../component/ItemList'; // 传入状态[当前数据,当前过滤值] const getVisibleItems = (data, filter) => { switch (filter) { case 'SHOW_COMPLETED': return { items: data.items.filter(t => t.isCompleted) } case 'SHOW_ACTIVE': return { items: data.items.filter(t => !t.isCompleted) } case 'SHOW_ALL': default: return data } }; // 定义输入逻辑 - 将state映射到UI组件的参数 const mapStateToProps = state => { return { data: getVisibleItems(state.data, state.filter) } }; // 定义输出逻辑 - UI操作到dispatch的映射 const mapDispatchToProps = dispatch => { return { toggleItem: id => { // 触发Action dispatch(toggleItem(id)) }, editItem: id => { dispatch(editItem(id)) }, removeItem: id => { dispatch(removeItem(id)) }, cancelEdit: id => { dispatch(cancelEdit(id)) } } }; // 从UI组件生成容器组件 const VisibleItemList = connect( mapStateToProps, mapDispatchToProps )(ItemList); export default VisibleItemList;</code></pre> <p>actions - items.js</p> <pre><code>export const addItem = text => ({ type: 'ADD_ITEM', id: new Date().getTime(), text }); export const toggleItem = id => ({ type: 'TOGGLE_ITEM', id }); export const removeItem = id => ({ type: 'REMOVE_ITEM', id }); export const editItem = id => ({ type: 'EDIT_ITEM', id }); export const saveItem = item => ({ type: 'SAVA_ITEM', item }); export const cancelEdit = id => ({ type: 'CANCEL_EDIT', id }); export const resetCreate = () => ({ type: 'RESET_CREATE' });</code></pre> <p>actions - visible.js</p> <pre><code>// Action Creator export const visible = filter => ({ type: 'SET_VISIBILITY_FILTER', filter });</code></pre> <p>reducers - filter.js</p> <pre><code>// 把state和action串起来返回新的state const filter = (state = 'SHOW_ALL', action) => { switch (action.type) { case 'SET_VISIBILITY_FILTER': return action.filter; default: return state; } } export default filter;</code></pre> <p>reducers - items.js</p> <pre><code>import _ from 'lodash'; // 初始化数据 const def = { items: [ { id: new Date().getTime(), text: "ASKE(北京)信息技术有限公司", isCompleted: false, isEditing: false }, { id: new Date().getHours(), text: "SWSN(北京)网络科技有限公司", isCompleted: true, isEditing: false }, { id: new Date().getMonth(), text: "SLMI(杭州)网络科技有限公司", isCompleted: false, isEditing: false } ], createError: '' }; const items = (state = def, action) => { // state = {}, switch (action.type) { case 'ADD_ITEM': { // 非空检查 if (!action.text) { return { items: state.items, createError: '请输入公司名称' } } // 验证重复 let foundItem = _.find(state.items, item => (action.text === item.text) ); if (foundItem) { return { items: state.items, createError: '公司名称已存在' } } // 将新加的数据与原数据合并 return { items: [ ...state.items, { id: action.id, text: action.text, isCompleted: false, isEditing: false } ], defaultValue: '', createError: '' } } case 'TOGGLE_ITEM': // 切换状态数据 return { items: state.items.map(item => (item.id === action.id) ? { ...item, isCompleted: !item.isCompleted } : item ), createError: '' } case 'REMOVE_ITEM': // 删除数据[根据ID] return { items: _.remove(state.items, item => item.id !== action.id), createError: '' } case 'EDIT_ITEM': // 编辑数据 return { items: state.items.map(item => (item.id === action.id) ? {...item, isEditing: true} : item ), createError: '' } case 'SAVA_ITEM': { // 非空检查 if (!action.item.text) { return { items: state.items.map(item => (item.id === action.item.id) ? { ...item, error: '请输入公司名称' } : item ), createError: '' } } // 验证重复 let foundItem = _.find(state.items, item => (action.item.text === item.text && action.item.id !== item.id) ); if (foundItem) { return { items: state.items.map(item => (item.id === action.item.id) ? { ...item, error: '公司名称已存在' } : item ), createError: '' } } // 修改数据 return { items: state.items.map(item => (item.id === action.item.id) ? { ...item, text: action.item.text, isEditing: false, error: null } : item ), createError: '' } } case 'CANCEL_EDIT': // 取消编辑 return { items: state.items.map(item => (item.id === action.id) ? { ...item, isEditing: false, error: null } : item ), createError: '' } case 'RESET_CREATE': // 重置添加 return { items: state.items, createError: '' } default: return state; } } export default items;</code></pre> <p>reducers - index.js</p> <pre><code>import {combineReducers} from 'redux'; import items from './items'; import filter from './filter'; // 生成一个整体的Reducer函数[状态 - Reducer] export default combineReducers({ data: items, filter: filter });</code></pre> <p>运行:</p> <pre><code>npm run deves</code></pre> <p>结果:<br><span class="img-wrap"><a href="http://img.e-com-net.com/image/info8/e9312ba961e846ce912e8d23035ca965.jpg" target="_blank"><img src="http://img.e-com-net.com/image/info8/e9312ba961e846ce912e8d23035ca965.jpg" alt="React-Redux类似任务管理示例_第3张图片" title="图片描述" width="650" height="375" style="border:1px solid black;"></a></span></p> <p><span class="img-wrap"><a href="http://img.e-com-net.com/image/info8/58ce47e289e64729b87c71c24773f5ca.jpg" target="_blank"><img src="http://img.e-com-net.com/image/info8/58ce47e289e64729b87c71c24773f5ca.jpg" alt="React-Redux类似任务管理示例_第4张图片" title="图片描述" width="650" height="396" style="border:1px solid black;"></a></span></p> <p>备注:</p> <pre><code>代码可精简合并,仅供学习参考。</code></pre> </div> </div> </div> </div> </div> </div> <!--PC和WAP自适应版--> <div id="SOHUCS" sid="1293460559844417536"></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-Redux类似任务管理示例)</h4> <div id="paradigm-article-related"> <div class="recommend-post mb30"> <ul class="widget-links"> <li><a href="/article/1946899391025573888.htm" title="什么是序列化?是二进制吗?一文解答你的疑惑!" target="_blank">什么是序列化?是二进制吗?一文解答你的疑惑!</a> <span class="text-muted"></span> <div>一、序列化:数据转换的艺术1.1什么是序列化?序列化(Serialization)是指将数据结构或对象状态转换为可存储或可传输的格式的过程。简单来说,就是把内存中的对象变成可以保存到文件或通过网络发送的形式。//Java序列化示例publicclassPersonimplementsSerializable{privateStringname;privateintage;//gettersands</div> </li> <li><a href="/article/1946895864970670080.htm" title="个人笔记(linux/sort与uniq命令)" target="_blank">个人笔记(linux/sort与uniq命令)</a> <span class="text-muted"></span> <div>sort命令(排序)功能:行排序核心语法:sort[选项][文件]常用选项:选项作用示例-n数值排序sort-n-r降序排序sort-nr-k指定排序列sort-k2,2n-t指定分隔符sort-t':'-k3n-u去重(相当于uniq)sort-u典型用法:#按第二列数字降序排序sort-k2,2nrdata.txt#处理CSV文件(以逗号分隔)sort-t','-k3ndata.csv注意事项</div> </li> <li><a href="/article/1946885652024979456.htm" title="软件测试入门指南:零基础到实战通关手册" target="_blank">软件测试入门指南:零基础到实战通关手册</a> <span class="text-muted"></span> <div>一、为什么需要软件测试?行业现状(2024年数据)全球软件缺陷造成的经济损失高达$2.4万亿(来源:NIST报告)优秀测试人员与开发人员配比应达1:5(头部互联网企业实际数据)经典案例迪士尼+上线首日因负载测试不足导致服务器崩溃某银行系统未做金额边界测试,引发超额转账漏洞二、测试工程师的职责全景图(配图:测试工作流程图)阶段核心工作产出物示例需求分析参与评审,提取测试点测试需求跟踪矩阵测试设计编写</div> </li> <li><a href="/article/1946884138703319040.htm" title="Java大视界:Java大数据在智能医疗电子健康档案数据挖掘与健康服务创新>" target="_blank">Java大视界:Java大数据在智能医疗电子健康档案数据挖掘与健康服务创新></a> <span class="text-muted">Loving_enjoy</span> <a class="tag" taget="_blank" href="/search/%E8%AE%A1%E7%AE%97%E6%9C%BA%E5%AD%A6%E7%A7%91%E8%AE%BA%E6%96%87%E5%88%9B%E6%96%B0%E7%82%B9/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/%E6%B7%B1%E5%BA%A6%E5%AD%A6%E4%B9%A0/1.htm">深度学习</a><a class="tag" taget="_blank" href="/search/%E8%BF%81%E7%A7%BB%E5%AD%A6%E4%B9%A0/1.htm">迁移学习</a><a class="tag" taget="_blank" href="/search/%E7%BB%8F%E9%AA%8C%E5%88%86%E4%BA%AB/1.htm">经验分享</a> <div>>本文通过完整代码示例,揭秘如何用Java大数据技术挖掘电子健康档案价值,实现疾病预测、个性化健康管理等创新服务。###一、智能医疗时代的数据金矿电子健康档案(EHR)作为医疗数字化的核心载体,包含海量患者全生命周期健康数据。据统计,全球医疗数据量正以每年**48%的速度增长**,单个三甲医院年数据量可达**PB级**。这些数据蕴藏着疾病规律、治疗效能的宝贵知识,但传统技术难以有效挖掘。**Jav</div> </li> <li><a href="/article/1946877326386065408.htm" title="《谷歌时间管理课》:掌握这个法则,打造自己的高效能人生" target="_blank">《谷歌时间管理课》:掌握这个法则,打造自己的高效能人生</a> <span class="text-muted">日月照书时</span> <div>文|深夏晚晴天ZMH“想做的事情不少,可就是没时间啊!”“我手头的工作都做不完,怎么有空做……”“等我有时间了,我就……”生活中,我们没少听到类似的抱怨。不管是他人还是自己,总是难免会有感觉时间不够用的时刻。按道理来说,近百年来科技与工具的迅猛发展,早已解放了我们的双手,我们应该多出很多时间过上一种悠闲的生活才对。但事实是,科技越发达,我们感觉越焦虑,依然还有一大堆“做不完”的事。为了应对这种情况</div> </li> <li><a href="/article/1946876077762736128.htm" title="c++ 反射与QMetaObject::invokeMethod介绍" target="_blank">c++ 反射与QMetaObject::invokeMethod介绍</a> <span class="text-muted"></span> <div>文章目录c++QMetaObject::invokeMethodC++语言标准本身并不直接支持反射机制,这与Java、C#等语言不同,它们在语言层面提供了丰富的反射API。然而,C++是一种非常灵活的语言,可以通过一些设计和编程技巧来实现类似反射的功能。在C++中实现反射通常涉及以下几种技术:动态创建对象:反射可以在运行时创建任意一个已经定义的类的对象实例,即使你在编写代码时并不知道将要创建哪个类</div> </li> <li><a href="/article/1946875069263310848.htm" title="【FFmpeg】AVIOContext结构体" target="_blank">【FFmpeg】AVIOContext结构体</a> <span class="text-muted"></span> <div>【FFmpeg】AVIOContext结构体1.AVIOContext结构体的定义参考:FFMPEG结构体分析:AVIOContext示例工程:【FFmpeg】调用ffmpeg库实现264软编【FFmpeg】调用ffmpeg库实现264软解【FFmpeg】调用ffmpeg库进行RTMP推流和拉流【FFmpeg】调用ffmpeg库进行SDL2解码后渲染流程分析:【FFmpeg】编码链路上主要函数的简</div> </li> <li><a href="/article/1946873683784036352.htm" title="MySQL大表DDL方式对比" target="_blank">MySQL大表DDL方式对比</a> <span class="text-muted">三思呐三思</span> <a class="tag" taget="_blank" href="/search/MySQL/1.htm">MySQL</a><a class="tag" taget="_blank" href="/search/Online/1.htm">Online</a><a class="tag" taget="_blank" href="/search/DDL/1.htm">DDL</a><a class="tag" taget="_blank" href="/search/gh-ost/1.htm">gh-ost</a><a class="tag" taget="_blank" href="/search/pt-osc/1.htm">pt-osc</a><a class="tag" taget="_blank" href="/search/MySQL/1.htm">MySQL</a><a class="tag" taget="_blank" href="/search/DDL/1.htm">DDL</a> <div>文章目录一、原生DDL、OnlineDDL1.1Onlineddl操作原理1.2DDL操作的两个参数1.3OnlineDDL操作空间存储的要求二、pt-online-schema-change2.1pt-osc的大致流程:2.2pt-osc的特点2.3使用pt-osc的约束2.4操作示例三、gh-ost3.1gh-ost的三种模式3.2gh-ost的特点3.3使用gh-ost的约束线上环境的大表D</div> </li> <li><a href="/article/1946872044452900864.htm" title="Java 创建线程的方式笔记" target="_blank">Java 创建线程的方式笔记</a> <span class="text-muted">笑衬人心。</span> <a class="tag" taget="_blank" href="/search/JAVA%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/1.htm">JAVA学习笔记</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E7%AC%94%E8%AE%B0/1.htm">笔记</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a><a class="tag" taget="_blank" href="/search/juc/1.htm">juc</a> <div>一、Java中创建线程的四种主要方式方式简述适用场景继承Thread类重写run()方法,直接创建线程简单场景、临时任务实现Runnable接口将任务与线程分离推荐方式,任务更灵活实现Callable接口支持返回值和异常异步任务,需要结果的场景使用线程池(Executor)统一管理线程、复用资源高并发任务、后台服务等二、方式一:继承Thread类2.1示例代码publicclassMyThread</div> </li> <li><a href="/article/1946865618489765888.htm" title="959. 由斜杠划分区域【并查集】" target="_blank">959. 由斜杠划分区域【并查集】</a> <span class="text-muted">月下蓑衣江湖夜雨</span> <div>题目在由1x1方格组成的NxN网格grid中,每个1x1方块由/、\或空格构成。这些字符会将方块划分为一些共边的区域。(请注意,反斜杠字符是转义的,因此\用"\"表示。)。返回区域的数目。示例1:输入:["/","/"]输出:2解释:2x2网格如下:示例1示例2:输入:["/",""]输出:1解释:2x2网格如下:示例2示例3:输入:["\/","/\"]输出:4解释:(回想一下,因为\字符是转义</div> </li> <li><a href="/article/1946856418271358976.htm" title="nodejs值process.kill" target="_blank">nodejs值process.kill</a> <span class="text-muted"></span> <div>在Node.js中,process.kill()是一个核心方法,用于向指定进程发送信号以控制其行为(如终止、暂停或恢复)。它不仅限于终止进程,还能通过不同信号实现精细化的进程管理。以下从功能、参数、信号类型、使用场景、注意事项及示例等方面进行全面解析:一、核心功能process.kill(pid[,signal])的主要作用是向目标进程(通过pid指定)发送信号,从而控制其生命周期或状态。其名称中</div> </li> <li><a href="/article/1946847670983258112.htm" title="917. 仅仅反转字母" target="_blank">917. 仅仅反转字母</a> <span class="text-muted">Abeants</span> <div>给你一个字符串s,根据下述规则反转字符串:所有非英文字母保留在原有位置。所有英文字母(小写或大写)位置反转。返回反转后的s。示例1:输入:s="ab-cd"输出:"dc-ba"示例2:输入:s="a-bC-dEf-ghIj"输出:"j-Ih-gfE-dCba"示例3:输入:s="Test1ng-Leet=code-Q!"输出:"Qedo1ct-eeLg=ntse-T!"提示1<=s.length<</div> </li> <li><a href="/article/1946847341604564992.htm" title="Python 中的深拷贝、浅拷贝与等号赋值:理解对象复制的本质" target="_blank">Python 中的深拷贝、浅拷贝与等号赋值:理解对象复制的本质</a> <span class="text-muted">小羊苏八</span> <a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a> <div>目录1.等号赋值(=)2.浅拷贝(copy.copy())3.深拷贝(copy.deepcopy())4.不可变对象与可变对象5.性能对比6.实际应用场景7.总结前言在Python中,对象的复制是一个常见的操作,但很多人对深拷贝、浅拷贝和等号赋值之间的区别感到困惑。本文将通过详细的示例和解释,帮助你深入理解这三种操作的本质和应用场景。1.等号赋值(=)在Python中,等号赋值是最基本的对象操作之</div> </li> <li><a href="/article/1946843053973106688.htm" title="Python 中的闭包:原理、应用与实践" target="_blank">Python 中的闭包:原理、应用与实践</a> <span class="text-muted">小羊苏八</span> <a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a> <div>目录前言1.什么是闭包?2.闭包的基本结构3.闭包的应用场景4.闭包的高级特性5.闭包的性能与内存管理6.闭包的实践案例7.总结前言在Python编程中,闭包是一个非常强大且灵活的特性。闭包允许嵌套函数访问外部函数的变量,即使外部函数已经返回。这种特性使得闭包在函数式编程、装饰器、回调函数等场景中非常有用。本文将通过详细的示例和解释,深入探讨Python中的闭包。1.什么是闭包?闭包(Closur</div> </li> <li><a href="/article/1946842317952446464.htm" title="活好自己,一心助人" target="_blank">活好自己,一心助人</a> <span class="text-muted">灵心_心理咨询_邱玉东</span> <div>一活好自已学习并受益于“应用心理学”快两年了!两年的学习、改变与“回潮反复”,使我确认一项事实:在我的潜意识里,过去的东西都在!任何时候,只要有类似于过去经历中的人、事、物、场景(比如,家里人同样的态度、类似的做法)出现,储藏在潜意识里面情绪、表情或身体状态,都会转瞬即至!类似这样能唤起潜意识“电影”的事还有许多:同事、邻居、家人,所有熟悉的建筑,熟悉的房子,熟悉的道路,熟悉的路边景观,熟悉的人事</div> </li> <li><a href="/article/1946839521899376640.htm" title="Python之print打印" target="_blank">Python之print打印</a> <span class="text-muted">追捕的风</span> <a class="tag" taget="_blank" href="/search/Python%E4%B9%8B%E6%95%B0%E6%8D%AE%E5%A4%84%E7%90%86/1.htm">Python之数据处理</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a><a class="tag" taget="_blank" href="/search/%E7%88%AC%E8%99%AB/1.htm">爬虫</a> <div>python是一门脚本语言,少不了使用各种print打印调试,本文总结一下pythonprint打印的几种方法。1单独打印变量1.1只打印变量:方法:print(variable)示例:name="Mike"age=21print(name)print(age)输出:Mike211.2带其他信息:示例:name="Mike"age=21print('mynameis',name)print('my</div> </li> <li><a href="/article/1946838866338050048.htm" title="Mybatis嵌套foreach的坑" target="_blank">Mybatis嵌套foreach的坑</a> <span class="text-muted">MiaeLKK</span> <div>今天用xml写sql出现问题,mapper入参为集合,其中要获取集合中每个元素的某个属性,这个属性也是个集合。本来按照以前foreach写法,给集合项取个变量名,直接用这个变量名.属性名即可,但如果属性为集合好像就会报错。错误代码示例:andttask.fcreatetime>#{task.createtime[0]}andttask.fcreatetime<#{task.create</div> </li> <li><a href="/article/1946838867596341248.htm" title="C对接验证码短信接口DEMO示例" target="_blank">C对接验证码短信接口DEMO示例</a> <span class="text-muted">短信接口开发</span> <div>//接口类型:互亿无线触发短信接口,支持发送验证码短信、订单通知短信等。//账户注册:请通过该地址开通账户http://user.ihuyi.com/?DKimmu//注意事项://(1)调试期间,请使用用系统默认的短信内容:您的验证码是:【变量】。请不要把验证码泄露给其他人。//(2)请使用APIID及APIKEY来调用接口,可在会员中心获取;//(3)该代码仅供接入互亿无线短信接口参考使用,客</div> </li> <li><a href="/article/1946837378781999104.htm" title="DAY4——Python 推导式及 常见语句和内置函数个人总结" target="_blank">DAY4——Python 推导式及 常见语句和内置函数个人总结</a> <span class="text-muted"></span> <div>Python推导式Python推导式是一种简洁的语法结构,用于快速生成列表、字典、集合或生成器。推导式通常比传统的循环更高效且更易读。常见的推导式包括列表推导式、字典推导式、集合推导式和生成器推导式。列表推导式语法:[expressionforiteminiterableifcondition]示例:#生成平方数列表squares=[x**2forxinrange(10)]print(square</div> </li> <li><a href="/article/1946835675559030784.htm" title="Day61 二叉树中的最大路径和" target="_blank">Day61 二叉树中的最大路径和</a> <span class="text-muted">Shimmer_</span> <div>给你一个二叉树的根节点root,返回其最大路径和https://leetcode-cn.com/problems/binary-tree-maximum-path-sum/路径被定义为一条从树中任意节点出发,沿父节点-子节点连接,达到任意节点的序列。同一个节点在一条路径序列中至多出现一次。该路径至少包含一个节点,且不一定经过根节点路径和是路径中各节点值的总和。示例1:1/\23输入:root=[1</div> </li> <li><a href="/article/1946832206236282880.htm" title="绝对定位 vs 浮动:CSS布局核心差异解析" target="_blank">绝对定位 vs 浮动:CSS布局核心差异解析</a> <span class="text-muted">代码的余温</span> <a class="tag" taget="_blank" href="/search/css/1.htm">css</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a> <div>在CSS布局中,position:absolute和float都能实现元素脱离常规文档流,但它们在定位机制、布局影响和使用场景上有本质区别:一、核心区别总结特性position:absolutefloat脱离文档流✅完全脱离,不占空间✅部分脱离(保留浮动流空间)定位基准相对于最近的非static祖先元素相对于父容器或相邻浮动元素元素类型转换自动转为块级元素(类似display:block)自动转为</div> </li> <li><a href="/article/1946831329979068416.htm" title="单亲或重组家庭对孩子的影响有多大,父母的性格会遗传给下一代吗" target="_blank">单亲或重组家庭对孩子的影响有多大,父母的性格会遗传给下一代吗</a> <span class="text-muted">女神读书评人生</span> <div>读书评阅读书籍推荐:读后感《天生非此》(英)奥利弗.詹姆斯最近我一直在思考关于原生家庭的问题,也研究了很多关于家庭教育和心理相关的书籍,在读《天生非此》这本书之前,我对父母的遗传对子女的影响到底有多深是有比较多的疑问的。这本书用大量示例分析了遗传对一个人的影响是很小的。在前几年,我对人的性格的看法,和大多数人一样,都说看一个女人怎么样,就看她的母亲是什么样,看一个男人怎么样,就看他的父亲是怎么样,</div> </li> <li><a href="/article/1946830567626567680.htm" title="matlab_simulink仿真BLDC无刷直流电机 转速电流双闭环 调速系统" target="_blank">matlab_simulink仿真BLDC无刷直流电机 转速电流双闭环 调速系统</a> <span class="text-muted">985计算机硕士</span> <a class="tag" taget="_blank" href="/search/%E4%BB%BF%E7%9C%9F%E6%A8%A1%E5%9E%8B/1.htm">仿真模型</a><a class="tag" taget="_blank" href="/search/%E7%94%B5%E5%8A%9B%E7%B3%BB%E7%BB%9F/1.htm">电力系统</a><a class="tag" taget="_blank" href="/search/matlab/1.htm">matlab</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a> <div>matlab/simulink仿真BLDC无刷直流电机转速电流双闭环调速系统以下文字及示例代码仅供参考文章目录一、为什么需要“转速-电流”双闭环?二、系统整体架构三、在Simulink中搭建步骤3.1新建模型与库引用3.2电机本体3.3电流采样与Clarke/Park3.4电流环PI设计3.5转速环PI设计3.6SVPWM与逆变器3.7速度给定与负载四、一键运行脚本五、结果解读【标题】Matlab</div> </li> <li><a href="/article/1946825145704312832.htm" title="校园导游系统(C++)" target="_blank">校园导游系统(C++)</a> <span class="text-muted">白开水最甜</span> <a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84/1.htm">数据结构</a><a class="tag" taget="_blank" href="/search/%E8%AF%BE%E7%A8%8B%E8%AE%BE%E8%AE%A1/1.htm">课程设计</a><a class="tag" taget="_blank" href="/search/%E6%A0%A1%E5%9B%AD%E5%AF%BC%E8%88%AA%E7%B3%BB%E7%BB%9F/1.htm">校园导航系统</a> <div>问题总结1、当使用时,该头文件没有定义全局命名空间,必须使用usingnamespacestd,这样才能使用类似于cout这样的C++标识符正确用法:#includeusingnamespacestd;2、对称赋值(注意细节)for(i=1;i注意string第一个字母是小写4、使用迪杰特斯拉算法出现的问题只设置与起始节点v0有弧时前驱设置为v0,否则为-1,而忘记设置起始节点的前驱为-1。以至于</div> </li> <li><a href="/article/1946822498553229312.htm" title="【C语言】语义陷阱探秘(一):指针与数组" target="_blank">【C语言】语义陷阱探秘(一):指针与数组</a> <span class="text-muted">byte轻骑兵</span> <a class="tag" taget="_blank" href="/search/C/1.htm">C</a><a class="tag" taget="_blank" href="/search/%E8%AF%AD%E8%A8%80%E5%AE%9E%E6%88%98%E9%81%BF%E5%9D%91%EF%BC%9A%E4%BB%8E%E6%96%B0%E6%89%8B%E5%88%B0/1.htm">语言实战避坑:从新手到</a><a class="tag" taget="_blank" href="/search/%E2%80%9C%E8%80%81%E6%B2%B9%E6%9D%A1%E2%80%9D/1.htm">“老油条”</a><a class="tag" taget="_blank" href="/search/%E7%9A%84%E8%9C%95%E5%8F%98/1.htm">的蜕变</a><a class="tag" taget="_blank" href="/search/c%E8%AF%AD%E8%A8%80/1.htm">c语言</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a> <div>目录一、指针与数组的基本关系1.1.数组名与指针1.2.数组下标与指针运算1.3.示例二、常见的语义陷阱2.1指针未初始化2.1.1.陷阱描述:指针未初始化2.1.2.解决方法2.1.3.示例2.2数组越界2.2.1.陷阱描述2.2.2.解决方法2.2.3.示例2.2.4.注意事项2.3指针和数组的相互转换错误2.3.1.陷阱描述2.3.2.解决方法2.3.3.示例2.3.4.注意事项2.4指针引</div> </li> <li><a href="/article/1946817960203055104.htm" title="Leetcode 202 快乐数" target="_blank">Leetcode 202 快乐数</a> <span class="text-muted"></span> <div>Leetcode202快乐数编写一个算法来判断一个数n是不是快乐数。「快乐数」定义为:对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和。然后重复这个过程直到这个数变为1,也可能是无限循环但始终变不到1。如果这个过程结果为1,那么这个数就是快乐数。如果n是快乐数就返回true;不是,则返回false。示例1:输入:n=19输出:true解释:12+92=8282+22=6862+82=1</div> </li> <li><a href="/article/1946817690870018048.htm" title="2022-10-22 NO.53 SOP思维" target="_blank">2022-10-22 NO.53 SOP思维</a> <span class="text-muted">nice_lady</span> <div>SOP是英文单词StandardOperatingProcedure三个单词中首字母的大写,即标准作业程序。将某一任务的过程、要求以标准化的方式写出来,应用场景包括很多标准化生产的流程,也包括诸如肯德基炸薯条、医生手术前的一些列操作等。这么做的好处是,可以使复杂工作简单化,避免遗漏和出错。类似模板思维和流程图,可以节省很多的时间,适用于经常重复的事项。借鉴这种思维方式,我下午对家庭生活中的一些事情</div> </li> <li><a href="/article/1946811556482314240.htm" title="类似39游戏盒子的有哪些 和39游戏盒子一样的盒子推荐" target="_blank">类似39游戏盒子的有哪些 和39游戏盒子一样的盒子推荐</a> <span class="text-muted">诸葛村夫123</span> <div>免费在线游戏盒子为我们的日常休闲娱乐提供了丰富多样的游戏体验。有些游戏平台相当优质,同时还提供实时动态、活动福利等。现在让我们一起探寻哪些免费在线游戏网站值得你投入时间和精力,沉浸在游戏的世界中,畅玩各种好玩的游戏。2024最火的免费游戏盒子排行榜大全───┅┈━━━━━━━━┅┈─────────────Top1──────────游戏盒子名字:游戏豹官网-特点-:手机游戏门户盒子日活跃量:1.</div> </li> <li><a href="/article/1946810269481103360.htm" title="【CMake】使用 CMake 构建 C/C++ 项目的标准流程详解" target="_blank">【CMake】使用 CMake 构建 C/C++ 项目的标准流程详解</a> <span class="text-muted"></span> <div>目录️使用CMake构建C/C++项目的标准流程详解目录1️⃣项目结构约定2️⃣跨平台构建环境准备3️⃣标准构建流程4️⃣构建后目录结构示例Linux/macOSWindows+MinGW5️⃣常用构建操作命令6️⃣跨平台命令对照表7️⃣注意事项与最佳实践8️⃣总结相关文章:️使用CMake构建C/C++项目的标准流程详解目录项目结构约定跨平台构建环境准备标准构建流程构建后目录结构示例常用构建操作</div> </li> <li><a href="/article/1946809135450353664.htm" title="AI人工智能领域TensorFlow的模型训练策略" target="_blank">AI人工智能领域TensorFlow的模型训练策略</a> <span class="text-muted">AIGC应用创新大全</span> <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/tensorflow/1.htm">tensorflow</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/ai/1.htm">ai</a> <div>AI人工智能领域TensorFlow的模型训练策略关键词:TensorFlow、模型训练、深度学习、神经网络、优化策略、分布式训练、迁移学习摘要:本文将深入探讨TensorFlow框架下的模型训练策略,从基础概念到高级技巧,全面解析如何高效训练深度学习模型。我们将从数据准备、模型构建、训练优化到部署应用,一步步揭示TensorFlow模型训练的核心技术,并通过实际代码示例展示最佳实践。背景介绍目的</div> </li> <li><a href="/article/3.htm" title="枚举的构造函数中抛出异常会怎样" target="_blank">枚举的构造函数中抛出异常会怎样</a> <span class="text-muted">bylijinnan</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/enum/1.htm">enum</a><a class="tag" taget="_blank" href="/search/%E5%8D%95%E4%BE%8B/1.htm">单例</a> <div>首先从使用enum实现单例说起。 为什么要用enum来实现单例? 这篇文章( http://javarevisited.blogspot.sg/2012/07/why-enum-singleton-are-better-in-java.html)阐述了三个理由: 1.enum单例简单、容易,只需几行代码: public enum Singleton { INSTANCE;</div> </li> <li><a href="/article/130.htm" title="CMake 教程" target="_blank">CMake 教程</a> <span class="text-muted">aigo</span> <a class="tag" taget="_blank" href="/search/C%2B%2B/1.htm">C++</a> <div>转自:http://xiang.lf.blog.163.com/blog/static/127733322201481114456136/   CMake是一个跨平台的程序构建工具,比如起自己编写Makefile方便很多。 介绍:http://baike.baidu.com/view/1126160.htm 本文件不介绍CMake的基本语法,下面是篇不错的入门教程: http:</div> </li> <li><a href="/article/257.htm" title="cvc-complex-type.2.3: Element 'beans' cannot have character" target="_blank">cvc-complex-type.2.3: Element 'beans' cannot have character</a> <span class="text-muted">Cb123456</span> <a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a><a class="tag" taget="_blank" href="/search/Webgis/1.htm">Webgis</a> <div>  cvc-complex-type.2.3: Element 'beans' cannot have character     Line 33 in XML document from ServletContext resource [/WEB-INF/backend-servlet.xml] is i</div> </li> <li><a href="/article/384.htm" title="jquery实例:随页面滚动条滚动而自动加载内容" target="_blank">jquery实例:随页面滚动条滚动而自动加载内容</a> <span class="text-muted">120153216</span> <a class="tag" taget="_blank" href="/search/jquery/1.htm">jquery</a> <div><script language="javascript"> $(function (){ var i = 4;$(window).bind("scroll", function (event){ //滚动条到网页头部的 高度,兼容ie,ff,chrome var top = document.documentElement.s</div> </li> <li><a href="/article/511.htm" title="将数据库中的数据转换成dbs文件" target="_blank">将数据库中的数据转换成dbs文件</a> <span class="text-muted">何必如此</span> <a class="tag" taget="_blank" href="/search/sql/1.htm">sql</a><a class="tag" taget="_blank" href="/search/dbs/1.htm">dbs</a> <div>旗正规则引擎通过数据库配置器(DataBuilder)来管理数据库,无论是Oracle,还是其他主流的数据都支持,操作方式是一样的。旗正规则引擎的数据库配置器是用于编辑数据库结构信息以及管理数据库表数据,并且可以执行SQL 语句,主要功能如下。 1)数据库生成表结构信息:         主要生成数据库配置文件(.conf文</div> </li> <li><a href="/article/638.htm" title="在IBATIS中配置SQL语句的IN方式" target="_blank">在IBATIS中配置SQL语句的IN方式</a> <span class="text-muted">357029540</span> <a class="tag" taget="_blank" href="/search/ibatis/1.htm">ibatis</a> <div>在使用IBATIS进行SQL语句配置查询时,我们一定会遇到通过IN查询的地方,在使用IN查询时我们可以有两种方式进行配置参数:String和List。具体使用方式如下: 1.String:定义一个String的参数userIds,把这个参数传入IBATIS的sql配置文件,sql语句就可以这样写: <select id="getForms" param</div> </li> <li><a href="/article/765.htm" title="Spring3 MVC 笔记(一)" target="_blank">Spring3 MVC 笔记(一)</a> <span class="text-muted">7454103</span> <a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a><a class="tag" taget="_blank" href="/search/mvc/1.htm">mvc</a><a class="tag" taget="_blank" href="/search/bean/1.htm">bean</a><a class="tag" taget="_blank" href="/search/REST/1.htm">REST</a><a class="tag" taget="_blank" href="/search/JSF/1.htm">JSF</a> <div>         自从 MVC 这个概念提出来之后 struts1.X  struts2.X   jsf 。。。。。 这个view 层的技术一个接一个! 都用过!不敢说哪个绝对的强悍! 要看业务,和整体的设计!      最近公司要求开发个新系统!</div> </li> <li><a href="/article/892.htm" title="Timer与Spring Quartz 定时执行程序" target="_blank">Timer与Spring Quartz 定时执行程序</a> <span class="text-muted">darkranger</span> <a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a><a class="tag" taget="_blank" href="/search/bean/1.htm">bean</a><a class="tag" taget="_blank" href="/search/%E5%B7%A5%E4%BD%9C/1.htm">工作</a><a class="tag" taget="_blank" href="/search/quartz/1.htm">quartz</a> <div>有时候需要定时触发某一项任务。其实在jdk1.3,java sdk就通过java.util.Timer提供相应的功能。一个简单的例子说明如何使用,很简单: 1、第一步,我们需要建立一项任务,我们的任务需要继承java.util.TimerTask package com.test; import java.text.SimpleDateFormat; import java.util.Date; </div> </li> <li><a href="/article/1019.htm" title="大端小端转换,le32_to_cpu 和cpu_to_le32" target="_blank">大端小端转换,le32_to_cpu 和cpu_to_le32</a> <span class="text-muted">aijuans</span> <a class="tag" taget="_blank" href="/search/C%E8%AF%AD%E8%A8%80%E7%9B%B8%E5%85%B3/1.htm">C语言相关</a> <div>大端小端转换,le32_to_cpu 和cpu_to_le32  字节序 http://oss.org.cn/kernel-book/ldd3/ch11s04.html         小心不要假设字节序. PC 存储多字节值是低字节为先(小端为先, 因此是小端), 一些高级的平台以另一种方式(大端)</div> </li> <li><a href="/article/1146.htm" title="Nginx负载均衡配置实例详解" target="_blank">Nginx负载均衡配置实例详解</a> <span class="text-muted">avords</span> <div>[导读] 负载均衡是我们大流量网站要做的一个东西,下面我来给大家介绍在Nginx服务器上进行负载均衡配置方法,希望对有需要的同学有所帮助哦。负载均衡先来简单了解一下什么是负载均衡,单从字面上的意思来理解就可以解 负载均衡是我们大流量网站要做的一个东西,下面我来给大家介绍在Nginx服务器上进行负载均衡配置方法,希望对有需要的同学有所帮助哦。 负载均衡 先来简单了解一下什么是负载均衡</div> </li> <li><a href="/article/1273.htm" title="乱说的" target="_blank">乱说的</a> <span class="text-muted">houxinyou</span> <a class="tag" taget="_blank" href="/search/%E6%A1%86%E6%9E%B6/1.htm">框架</a><a class="tag" taget="_blank" href="/search/%E6%95%8F%E6%8D%B7%E5%BC%80%E5%8F%91/1.htm">敏捷开发</a><a class="tag" taget="_blank" href="/search/%E8%BD%AF%E4%BB%B6%E6%B5%8B%E8%AF%95/1.htm">软件测试</a> <div>从很久以前,大家就研究框架,开发方法,软件工程,好多!反正我是搞不明白! 这两天看好多人研究敏捷模型,瀑布模型!也没太搞明白. 不过感觉和程序开发语言差不多, 瀑布就是顺序,敏捷就是循环. 瀑布就是需求、分析、设计、编码、测试一步一步走下来。而敏捷就是按摸块或者说迭代做个循环,第个循环中也一样是需求、分析、设计、编码、测试一步一步走下来。 也可以把软件开发理</div> </li> <li><a href="/article/1400.htm" title="欣赏的价值——一个小故事" target="_blank">欣赏的价值——一个小故事</a> <span class="text-muted">bijian1013</span> <a class="tag" taget="_blank" href="/search/%E6%9C%89%E6%95%88%E8%BE%85%E5%AF%BC/1.htm">有效辅导</a><a class="tag" taget="_blank" href="/search/%E6%AC%A3%E8%B5%8F/1.htm">欣赏</a><a class="tag" taget="_blank" href="/search/%E6%AC%A3%E8%B5%8F%E7%9A%84%E4%BB%B7%E5%80%BC/1.htm">欣赏的价值</a> <div>  第一次参加家长会,幼儿园的老师说:"您的儿子有多动症,在板凳上连三分钟都坐不了,你最好带他去医院看一看。"  回家的路上,儿子问她老师都说了些什么,她鼻子一酸,差点流下泪来。因为全班30位小朋友,惟有他表现最差;惟有对他,老师表现出不屑,然而她还在告诉她的儿子:"老师表扬你了,说宝宝原来在板凳上坐不了一分钟,现在能坐三分钟。其他妈妈都非常羡慕妈妈,因为全班只有宝宝</div> </li> <li><a href="/article/1527.htm" title="包冲突问题的解决方法" target="_blank">包冲突问题的解决方法</a> <span class="text-muted">bingyingao</span> <a class="tag" taget="_blank" href="/search/eclipse/1.htm">eclipse</a><a class="tag" taget="_blank" href="/search/maven/1.htm">maven</a><a class="tag" taget="_blank" href="/search/exclusions/1.htm">exclusions</a><a class="tag" taget="_blank" href="/search/%E5%8C%85%E5%86%B2%E7%AA%81/1.htm">包冲突</a> <div>包冲突是开发过程中很常见的问题: 其表现有: 1.明明在eclipse中能够索引到某个类,运行时却报出找不到类。 2.明明在eclipse中能够索引到某个类的方法,运行时却报出找不到方法。 3.类及方法都有,以正确编译成了.class文件,在本机跑的好好的,发到测试或者正式环境就 抛如下异常: java.lang.NoClassDefFoundError: Could not in</div> </li> <li><a href="/article/1654.htm" title="【Spark七十五】Spark Streaming整合Flume-NG三之接入log4j" target="_blank">【Spark七十五】Spark Streaming整合Flume-NG三之接入log4j</a> <span class="text-muted">bit1129</span> <a class="tag" taget="_blank" href="/search/Stream/1.htm">Stream</a> <div>先来一段废话: 实际工作中,业务系统的日志基本上是使用Log4j写入到日志文件中的,问题的关键之处在于业务日志的格式混乱,这给对日志文件中的日志进行统计分析带来了极大的困难,或者说,基本上无法进行分析,每个人写日志的习惯不同,导致日志行的格式五花八门,最后只能通过grep来查找特定的关键词缩小范围,但是在集群环境下,每个机器去grep一遍,分析一遍,这个效率如何可想之二,大好光阴都浪费在这上面了</div> </li> <li><a href="/article/1781.htm" title="sudoku solver in Haskell" target="_blank">sudoku solver in Haskell</a> <span class="text-muted">bookjovi</span> <a class="tag" taget="_blank" href="/search/sudoku/1.htm">sudoku</a><a class="tag" taget="_blank" href="/search/haskell/1.htm">haskell</a> <div>这几天没太多的事做,想着用函数式语言来写点实用的程序,像fib和prime之类的就不想提了(就一行代码的事),写什么程序呢?在网上闲逛时发现sudoku游戏,sudoku十几年前就知道了,学生生涯时也想过用C/Java来实现个智能求解,但到最后往往没写成,主要是用C/Java写的话会很麻烦。   现在写程序,本人总是有一种思维惯性,总是想把程序写的更紧凑,更精致,代码行数最少,所以现</div> </li> <li><a href="/article/1908.htm" title="java apache ftpClient" target="_blank">java apache ftpClient</a> <span class="text-muted">bro_feng</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a> <div>最近使用apache的ftpclient插件实现ftp下载,遇见几个问题,做如下总结。 1. 上传阻塞,一连串的上传,其中一个就阻塞了,或是用storeFile上传时返回false。查了点资料,说是FTP有主动模式和被动模式。将传出模式修改为被动模式ftp.enterLocalPassiveMode();然后就好了。 看了网上相关介绍,对主动模式和被动模式区别还是比较的模糊,不太了解被动模</div> </li> <li><a href="/article/2035.htm" title="读《研磨设计模式》-代码笔记-工厂方法模式" target="_blank">读《研磨设计模式》-代码笔记-工厂方法模式</a> <span class="text-muted">bylijinnan</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F/1.htm">设计模式</a> <div>声明: 本文只为方便我个人查阅和理解,详细的分析以及源代码请移步 原作者的博客http://chjavach.iteye.com/ package design.pattern; /* * 工厂方法模式:使一个类的实例化延迟到子类 * 某次,我在工作不知不觉中就用到了工厂方法模式(称为模板方法模式更恰当。2012-10-29): * 有很多不同的产品,它</div> </li> <li><a href="/article/2162.htm" title="面试记录语" target="_blank">面试记录语</a> <span class="text-muted">chenyu19891124</span> <a class="tag" taget="_blank" href="/search/%E6%8B%9B%E8%81%98/1.htm">招聘</a> <div>或许真的在一个平台上成长成什么样,都必须靠自己去努力。有了好的平台让自己展示,就该好好努力。今天是自己单独一次去面试别人,感觉有点小紧张,说话有点打结。在面试完后写面试情况表,下笔真的好难,尤其是要对面试人的情况说明真的好难。 今天面试的是自己同事的同事,现在的这个同事要离职了,介绍了我现在这位同事以前的同事来面试。今天这位求职者面试的是配置管理,期初看了简历觉得应该很适合做配置管理,但是今天面</div> </li> <li><a href="/article/2289.htm" title="Fire Workflow 1.0正式版终于发布了" target="_blank">Fire Workflow 1.0正式版终于发布了</a> <span class="text-muted">comsci</span> <a class="tag" taget="_blank" href="/search/%E5%B7%A5%E4%BD%9C/1.htm">工作</a><a class="tag" taget="_blank" href="/search/workflow/1.htm">workflow</a><a class="tag" taget="_blank" href="/search/Google/1.htm">Google</a> <div>Fire Workflow 是国内另外一款开源工作流,作者是著名的非也同志,哈哈.... 官方网站是 http://www.fireflow.org 经过大家努力,Fire Workflow 1.0正式版终于发布了 正式版主要变化: 1、增加IWorkItem.jumpToEx(...)方法,取消了当前环节和目标环节必须在同一条执行线的限制,使得自由流更加自由 2、增加IT</div> </li> <li><a href="/article/2416.htm" title="Python向脚本传参" target="_blank">Python向脚本传参</a> <span class="text-muted">daizj</span> <a class="tag" taget="_blank" href="/search/python/1.htm">python</a><a class="tag" taget="_blank" href="/search/%E8%84%9A%E6%9C%AC/1.htm">脚本</a><a class="tag" taget="_blank" href="/search/%E4%BC%A0%E5%8F%82/1.htm">传参</a> <div>如果想对python脚本传参数,python中对应的argc, argv(c语言的命令行参数)是什么呢? 需要模块:sys 参数个数:len(sys.argv) 脚本名:    sys.argv[0] 参数1:     sys.argv[1] 参数2:     sys.argv[</div> </li> <li><a href="/article/2543.htm" title="管理用户分组的命令gpasswd" target="_blank">管理用户分组的命令gpasswd</a> <span class="text-muted">dongwei_6688</span> <a class="tag" taget="_blank" href="/search/passwd/1.htm">passwd</a> <div>NAME: gpasswd - administer the /etc/group file SYNOPSIS: gpasswd group gpasswd -a user group gpasswd -d user group gpasswd -R group gpasswd -r group gpasswd [-A user,...] [-M user,...] g</div> </li> <li><a href="/article/2670.htm" title="郝斌老师数据结构课程笔记" target="_blank">郝斌老师数据结构课程笔记</a> <span class="text-muted">dcj3sjt126com</span> <a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84%E4%B8%8E%E7%AE%97%E6%B3%95/1.htm">数据结构与算法</a> <div><<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<</div> </li> <li><a href="/article/2797.htm" title="yii2 cgridview加上选择框进行操作" target="_blank">yii2 cgridview加上选择框进行操作</a> <span class="text-muted">dcj3sjt126com</span> <a class="tag" taget="_blank" href="/search/GridView/1.htm">GridView</a> <div>页面代码 <?=Html::beginForm(['controller/bulk'],'post');?> <?=Html::dropDownList('action','',[''=>'Mark selected as: ','c'=>'Confirmed','nc'=>'No Confirmed'],['class'=>'dropdown',])</div> </li> <li><a href="/article/2924.htm" title="linux mysql" target="_blank">linux mysql</a> <span class="text-muted">fypop</span> <a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a> <div>enquiry mysql version in centos linux yum list installed | grep mysql yum -y remove mysql-libs.x86_64 enquiry mysql version in yum repositoryyum list | grep mysql oryum -y list mysql* install mysq</div> </li> <li><a href="/article/3051.htm" title="Scramble String" target="_blank">Scramble String</a> <span class="text-muted">hcx2013</span> <a class="tag" taget="_blank" href="/search/String/1.htm">String</a> <div>Given a string s1, we may represent it as a binary tree by partitioning it to two non-empty substrings recursively. Below is one possible representation of s1 = "great":</div> </li> <li><a href="/article/3178.htm" title="跟我学Shiro目录贴" target="_blank">跟我学Shiro目录贴</a> <span class="text-muted">jinnianshilongnian</span> <a class="tag" taget="_blank" href="/search/%E8%B7%9F%E6%88%91%E5%AD%A6shiro/1.htm">跟我学shiro</a> <div>历经三个月左右时间,《跟我学Shiro》系列教程已经完结,暂时没有需要补充的内容,因此生成PDF版供大家下载。最近项目比较紧,没有时间解答一些疑问,暂时无法回复一些问题,很抱歉,不过可以加群(334194438/348194195)一起讨论问题。     ----广告-----------------------------------------------------</div> </li> <li><a href="/article/3305.htm" title="nginx日志切割并使用flume-ng收集日志" target="_blank">nginx日志切割并使用flume-ng收集日志</a> <span class="text-muted">liyonghui160com</span> <div>     nginx的日志文件没有rotate功能。如果你不处理,日志文件将变得越来越大,还好我们可以写一个nginx日志切割脚本来自动切割日志文件。第一步就是重命名日志文件,不用担心重命名后nginx找不到日志文件而丢失日志。在你未重新打开原名字的日志文件前,nginx还是会向你重命名的文件写日志,linux是靠文件描述符而不是文件名定位文件。第二步向nginx主</div> </li> <li><a href="/article/3432.htm" title="Oracle死锁解决方法" target="_blank">Oracle死锁解决方法</a> <span class="text-muted">pda158</span> <a class="tag" taget="_blank" href="/search/oracle/1.htm">oracle</a> <div> select p.spid,c.object_name,b.session_id,b.oracle_username,b.os_user_name from v$process p,v$session a, v$locked_object b,all_objects c where p.addr=a.paddr and a.process=b.process and c.object_id=b.</div> </li> <li><a href="/article/3559.htm" title="java之List排序" target="_blank">java之List排序</a> <span class="text-muted">shiguanghui</span> <a class="tag" taget="_blank" href="/search/list%E6%8E%92%E5%BA%8F/1.htm">list排序</a> <div>   在Java Collection Framework中定义的List实现有Vector,ArrayList和LinkedList。这些集合提供了对对象组的索引访问。他们提供了元素的添加与删除支持。然而,它们并没有内置的元素排序支持。   你能够使用java.util.Collections类中的sort()方法对List元素进行排序。你既可以给方法传递</div> </li> <li><a href="/article/3686.htm" title="servlet单例多线程" target="_blank">servlet单例多线程</a> <span class="text-muted">utopialxw</span> <a class="tag" taget="_blank" href="/search/%E5%8D%95%E4%BE%8B/1.htm">单例</a><a class="tag" taget="_blank" href="/search/%E5%A4%9A%E7%BA%BF%E7%A8%8B/1.htm">多线程</a><a class="tag" taget="_blank" href="/search/servlet/1.htm">servlet</a> <div>转自http://www.cnblogs.com/yjhrem/articles/3160864.html 和   http://blog.chinaunix.net/uid-7374279-id-3687149.html Servlet 单例多线程 Servlet如何处理多个请求访问?Servlet容器默认是采用单实例多线程的方式处理多个请求的:1.当web服务器启动的</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>