精华内容
下载资源
问答
  • 钉钉待办事项功能描述 之前我们确定计划,对接一款可以满足目前日常工作场景的todo类产品,根据对以下三点,我们确定了一款对接产品。 有开放的API可以添加、修改待办事项。 ...添加待办事项分...

    钉钉待办事项功能描述

    在这里插入图片描述

    之前我们确定计划,对接一款可以满足目前日常工作场景的todo类产品,根据对以下三点,我们确定了一款对接产品。

    有开放的API可以添加、修改待办事项。

    可以给他人新建待办事项。

    绝大部分的公司使用钉钉对企业进行管理,对于钉钉并不陌生。

    可以看出钉钉中待办事项功能可以完成满足我们日常需求。所以选定钉钉作为第一款todo软件接入。

    钉钉待办事项结构框架

    结构分析

    在这里插入图片描述

    添加待办事项分为俩种。一种是设置自己为执行人,另一种设置他人(多人)为执行人,满足团队协作需求。其中还包括时间、优先级、提醒等功能。

    界面流程图

    在这里插入图片描述

    总结

    番茄钟

    钉钉中待办事项只是针对企业管理,所以没有关于番茄种的使用场景。而我们产品主要目的是提升效率,不知大家对于番茄钟的使用有没有需求呢?

    新建待办

    钉钉中新建待办任务,比较繁琐,新建一个完成的待办事项最少需要跳转5个页面。可以优化为一句话新建待办。如:请小蛋同学在今天下午六点前完成。可以通过文字输入和语音输入俩种方式。语音输入可借助小爱同学实现。

    物理屏幕

    创建一块独立于电脑的物理屏幕,可借助手机或墨水屏等载体实现。

    任务完成按钮

    实体的任务完成按钮确实更能释放get the job down的快感。但对于工作效率的提升来说可能不会带来更多的帮助。

    在我们思维的不断碰撞之中一定还有需要其他的地方可以优化,希望您可以参与进来与我们一起做一个属于自己的产品。

    大蛋科技将会持续关注社会各个层面的创新,并构建产品,投入使用,想要一起折腾、玩转IT圈的同学,请关注“大蛋科技”,带你见识一个个新奇产品的诞生。也期待你的加入!下拉评论有惊喜哦!

    展开全文
  • 我是一个工作效率高的书呆子,喜欢使用待办事项列表应用程序来计划和安排我的生活。 我喜欢如何组织待办事项。 它具有面积-用于项目的更大的不可归档容器。 它还具有标题,可帮助您将同一项目中的待办事项分类。 ...
  • 此仓库使用git提供的版本控制来管理待办事项。 TODO-MANAGER REPO系统地管理待办事项清单,并遵循软件工程原理,请参见最佳实践以获取更多详细信息 标签样式遵循“ Garan-共享知识库”。 要求 笔记: 需求清单并不...
  • 看着不文件、不梳理数据流向、不解释代码思路的各种文章,我决定自己写一篇redux入门实例——简单的待办事项列表。 github 效果展示 开始之前 redux的基本原则 整个应用的state被储存一个object t...

    写在前面

    "待办事项列表"这个例子是redux文档推荐的,但是对于新人来说,官方文档和网上博客的相关解释都不是很好,没有思路分析到代码实现整个个过程,这令我在学习的时候非常头疼。看着不分文件、不梳理数据流向、不解释代码思路的各种文章,我决定自己写一篇redux入门实例——简单的待办事项列表。
    github

    效果展示

    在这里插入图片描述

    开始之前

    redux的基本原则

    • 整个应用的state被储存一个object tree中,并且这个object tree只存在于唯一的store中。
    • 唯一改变state的方法是通过dispatch触发actionaction是一个描述修改意图的普通对象,例如:{ type: add, value }
    • store收到action后,开始在reducer中计算,最后返回一个新的state
    • Redux 入门教程官方文档

    命令行

    create-react-app redux-todolist
    cnpm i redux react-redux -S
    

    目录结构

    准备

    使用Provider

    在根组件外用provider包裹,可以让所有组件都能拿到state

    // App.js
    import React from 'react';
    import { Provider } from 'react-redux';
    import AddTodo from './containers/addtodo'; //注意引用的位置
    import ShowList from './containers/showlist'; //注意引用的位置
    import Filter from './containers/filter' //注意引用的位置
    import store from './redux/store' //注意引用的位置
    function App() {
      return (
        <Provider store = {store}>
          <AddTodo />
          <ShowList />
          <Filter />
        </Provider>
      );
    }
    export default App;
    
    

    触发Reducer自动执行

    实际应用中,dispatch方法需要触发 reducer 的自动执行,从而对state进行修改。为此,store 需要知道 reducer 函数,做法就是在生成 store 的时候,将 reducer 传入createStore方法。

    // redux/store
    import {createStore} from 'redux'
    import reducers from './reducers/reducers'
    // createStore接受 reducers 作为参数,生成一个新的Store。
    // 以后每当dispatch发送过来一个新的 action,就会自动调用reducers(多个reducer的组合),得到新的 State。
    const store = createStore(reducers)
    export default store 
    

    添加事项

    UI组件AddTodo

    新建AddTodo组件,当点击添加时,将输入框内的值value通过调用props接收到的addTodoText方法,传递到containers下的容器组件addtodo中。

    //components/addtodo/AddTodo
    import React, { Component } from 'react';
    class AddTodo extends Component {
      handleAdd() {
        if(this.refs.inputText.value) {
          this.props.addTodoText(this.refs.inputText.value)
          // 调用接受到的addTodoText方法
          // 这个方法会在containers下的容器组件addtodo中与组件AddToDo连接
          this.refs.inputText.value = ''
        }
      }
      render() { 
        return ( 
          <div>
            <input type="text" ref="inputText" />
            <button onClick={this.handleAdd.bind(this)}>添加</button>
          </div>
        );
      }
    }
    export default AddTodo;
    

    容器组件addtodo

    connect方法会将UI组件AddTodo进行包装,并添加业务逻辑:输入逻辑mapStateToProps、输出逻辑mapDispatchToProps,最后得到一个容器组件 addtodo。这里只用到了输出逻辑(用户在组件上的操作如何变为action对象,点击的‘添加事项’会从这里传出去)。

    // containers/addtodo
    import AddTodo from '../components/addtodo/AddTodo';
    import { connect } from 'react-redux'
    import { addTodo } from '../redux/actions'
    // 这是一个重点,一定要理解
    const mapDispatchToProps = (dispatch) => {
      return {
        addTodoText: (text)=> {
          //console.log('传递成功',text);
          dispatch(addTodo(text))
          // dispatch 会发出action-addTodo
          // 在redux/actions下存储了多个action
        }
      }
    }
    export default connect(null, mapDispatchToProps)(AddTodo)
    
    // redux/actions
    import * as actionTypes from './actionTypes'
    export function addTodo(text) {
      return { type: actionTypes.ADD, text, completed: false}
      // 在actionTypes 下存储了多个用来描述修改意图的参数
    }
    
    //   redux/actionTypes
    export const ADD = "ADD"
    // 添加事件
    

    触发reducer

    在容器组件addtodo中触发了dispatch并传递一个新的action,自动调用reducers中的todolist

     // reducers/todolist
     function NewList(state = [], action) {
     //调用时的state内容是上次添加完成后的内容
     //新内容在action中
      switch(action.type){
        case 'ADD': 
          state = [{text: action.text, completed: action.completed}, ...state] 
          return state
        default: return state
      }
    }
    export default NewList
    
    // reducers/reducers
    import { combineReducers } from 'redux'
    import NewList from './todolist'
    export default combineReducers({
      NewList,
      // 有多个reducer要在这里引入
    })
    
    

    获取reducer处理完成后的数据

    这里将会使用UI组件ShowList的容器组件showlistshowlist通过输入逻辑mapStateToProps获取reducer处理完成后的state,并将其映射到UI组件ShowListprops中。

    //  containers/showlist
    // 只有容器组件才能获取state
    import { connect } from 'react-redux';
    import ShowList from '../components/showlist/ShowList';
    const mapStateToProps = (state) => {
      return {
        list: state.NewList
      }
    }
    export default connect (mapStateToProps, null)(ShowList)
    

    组件ShowList渲染数据

    state经过容器组件的传递,可在UI组件的this.props中获取。

    import React, { Component } from 'react';
    class ShowList extends Component {
      render() {
        let { list } = this.props //终于拿到点击添加后的事项
        return (
          <ul>
            {
              list.map((item, index) => (
                <li key={index}>
                  {item.text}
                </li>
              ))
            }
          </ul>
        );
      }
    }
    export default ShowList;
    

    完成事项

    实现:点击事项,出现删除线,表示已完成

    UI组件ShowList

    为每条事项添加点击事件,将点击的事项id传给容器组件上的dispatch,从而触发reducer进行修改。

    class ShowList extends Component {
      handleDone(index) {
        return () => {
          this.props.completedThing(index)
        }
      }
      render() {
        let { list } = this.props
        return (
          <ul>
            {
              list.map((item, index) => (
                <li onClick={this.handleDone(index)} key={index}
                  className={item.completed ? 'line-through' : ''}
                  ref='node'>
                     // 在css文件中更改样式
                  {item.text}
                </li>    
              ))
            }
          </ul>
        );
      }
    }
    export default ShowList;
    

    容器组件showlist

    通过UI组件的触发,在mapDispatchToProps中发起dispatch请求(与添加事项相似)。

    // containers/showlist
    import { connect } from 'react-redux';
    import ShowList from '../components/showlist/ShowList';
    import { completed } from '../redux/actions'   
    //  引入action
    const mapStateToProps = (state) => {
      return {list: state.NewList}    // 之前写过的
    }
    const mapDispatchToProps=(dispatch)=>{
      return {
        completedThing:(index)=>{
          // console.log('传递成功',index);
          dispatch(completed(index))
          }
      }
    }
    export default connect (mapStateToProps, mapDispatchToProps)(ShowList)
    
    // actions
    export function completed(index) {
      return { type: actionTypes.DONE, index}
      //将点击的事项的id传给reduce
    }
    
    // actionTypes
    // 完成事件
    export const DONE = 'DONE'
    

    触发reducer

    同样调用reducers中的todolist

    //  reducers/todolist 
    function NewList(state = [], action) {
      ......
        case 'DONE':
          return (() => {
            state = state.slice(0)
            state[action.index].completed = !state[action.index].completed; 
            // 修改事项中的complete参数 再返回数据
            return state
          })()
        default: return state
      }
    }
    export default NewList
    

    获取和渲染

    修改过state,UI组件ShowList会重新渲染,相关办法不改变。

    筛选事项

    UI组件Filter

    添加三个按钮的点击事件,分别对应容器组件上的方法。

    // components/filter/Filter
    import React, { Component } from 'react';
    class Filter extends Component {
      handleAll() {
       this.props.renderAll()
      }
      handleActive() {
        this.props.renderActive()
      }
      handleGone() {
        this.props.renderGone()
      }
      render() { 
        return ( 
          <div>
            <button onClick={this.handleAll.bind(this)}>全部</button>
            <button onClick={this.handleActive.bind(this)}>未完成</button>
            <button onClick={this.handleGone.bind(this)}>已完成</button>
          </div>
        );
      }
    }
    export default Filter;
    

    容器组件filter

    通过UI组件的触发,在mapDispatchToProps中发起dispatch请求。

    import { connect } from 'react-redux';
    import Filter from '../components/filter/Filter';
    import { selectAll, selectActive, selectGone } from '../redux/actions'
    
    const mapDispatchToProps = (dispatch) => {
      return {
        renderAll: () => {
          //console.log('加载全部');
          dispatch(selectAll())
        },
        renderActive: () => {
          //console.log('加载未完成');
          dispatch(selectActive())
        },
        renderGone: () => {
          //console.log('加载已完成');
          dispatch(selectGone())
        }
      }
    }
    export default connect(null, mapDispatchToProps)(Filter)
    
    // actions
    export function selectAll() {
      return { type: actionTypes.ALL }
      //注意这里传递的是点击的按钮参数 ‘ALL’
    }
    export function selectActive() {
      return { type: actionTypes.ACTIVE }
    }
    export function selectGone() {
      return { type: actionTypes.GONE }
    }
    
    // actionTypes
    // 加载全部事件
    export const ALL = 'ALL'
    // 加载未完成事件
    export const ACTIVE = 'ACTIVE'
    // 加载已完成事件
    export const GONE = 'GONE'
    

    触发reducer

    调用reducers下的filter,返回对应的参数放在 FilterTtpe中。

    // reducers/filter
    function FilterType(state, action) {
      switch(action.type) {
        case 'ACTIVE':
          return 'ACTIVE'
        case 'GONE':
          return 'GONE'
        default:
          return 'ALL'
          // 默认点击‘全部’,加载全部事项
      }
    }
    export default FilterType
    

    获取和渲染

    在容器组件showlist中通过接收到的NewListFilterType,对list进行筛选,返回给UI组件筛选完成后的新表。UI组件ShowList重新渲染。因为在点击筛选按钮的过程中没有添加新的事项,所以stateNewList一直是最后一次添加完成后的内容。

    import { connect } from 'react-redux';
    import ShowList from '../components/showlist/ShowList';
    import { completed } from '../redux/actions'
    
    const mapStateToProps = (state) => {
      //console.log(state.NewList);
      let fileList = []
      switch(state.FilterType) {
        case 'ACTIVE':
          fileList = state.NewList.filter(item => item.completed === false)
          return { list: fileList}
        case 'GONE':
          fileList = state.NewList.filter(item => item.completed === true)
          return { list: fileList}
        default:
          return { list: state.NewList}
      }
    }
    const mapDispatchToProps=(dispatch)=>{
      return {
        completedThing:(index)=>{
          //console.log('传递成功',index);
          dispatch(completed(index))
          }
      }
    }
    export default connect (mapStateToProps, mapDispatchToProps)(ShowList)
    

    总结

    • components文件夹下的UI组件只负责渲染数据,不负责业务逻辑;参数都由 this.props提供,不使用 this.state
    • containers文件夹下的容器组件负责数据管理和业务逻辑,主要通过 mapStateToProps, mapDispatchToProps来获取或处理数据。
    • react-redux提供的connect方法用于生成容器组件。
    • mapStateToProps负责输入逻辑,将reducer返回的state映射到UI组件的 props中。
    • mapDispatchToProps负责输出逻辑,将用户的反馈参数映射在 action中,并通过发起 dispatch来传递给 reducer进行修改。
    展开全文
  • Any.do是一款备受赞誉的应用,数百万人用它来梳理待办事项并完成更多工作。 规划生活从未如此简单 在一款简单的待办事项应用中管理您的任务、清单和提醒。Any.do可在您所有设备上实现无缝同步,让您的待办事项列表...
  • 本博客中待办事项

    2015-04-29 16:00:00
    下面的这些事,是接下来要写的博文,记在这里,防止自己忙着忙着忘记了打算做的事。 1.大数据相关术语(3) -> 大数据的算法描述及其他 ...任务完成不先后,完成即从列表中删除。 ...

    下面的这些事,是接下来要写的博文,记在这里,防止自己忙着忙着忘记了打算做的事。


    1.大数据相关术语(3) -> 大数据的算法描述及其他

    2. nosql 数据库的描述和简单比较

    3.PDF生成和读取识别的练习Demo



    任务完成不分先后,完成即从列表中删除。

    展开全文
  • 狗狗分类项目Here are three links worth your time: 这是三个值得您花费时间的... Here are some better project ideas (11 minute read) 每次您构建待办事项列表应用程序时,一只小狗都会死亡。 这是一些更好的...

    狗狗分类项目

    Here are three links worth your time:

    这是三个值得您花费时间的链接:

    1. Every time you build a to-do list app, a puppy dies. Here are some better project ideas (11 minute read)

      每次构建待办事项列表应用程序时,一只小狗都会死亡。 这是一些更好的项目构想( 阅读11分钟 )

    2. The absolute worst technology predictions of the past 150 years (4 minute read)

      过去150年中绝对最糟糕的技术预测( 阅读4分钟 )

    3. A former Firefox engineer explains why you should disable all anti-virus software (except for Microsoft’s) (2 minute read)

      一位前Firefox工程师解释了为什么您应该禁用所有防病毒软件(Microsoft除外)( 阅读2分钟 )

    Bonus: A bunch of retro-computing enthusiasts are still creating graphics for the 1981 TI-99/4A computer. Here’s their mega-demo (8 minute watch)

    奖励:一群复古计算机爱好者仍在为1981 TI-99 / 4A计算机创建图形。 这是他们的大型演示( 8分钟观看 )

    想到的一天: (Thought of the day:)

    “Never trust a computer you can’t throw out a window.” — Steve Wozniak
    “永远不要相信计算机,您不能丢下窗户。” —史蒂夫·沃兹尼亚克

    当天图片: (Image of the day:)

    A code plate of the IBM 026. Read more about this old punch card technology here.

    在IBM 026读取的代码板更多关于这个老打卡技术在这里

    Happy coding!

    编码愉快!

    – Quincy Larson, teacher at freeCodeCamp

    – Quincy Larson, freeCodeCamp的老师

    翻译自: https://www.freecodecamp.org/news/every-time-you-build-a-to-do-list-app-a-puppy-dies-here-are-some-better-project-ideas-279d4055f77/

    狗狗分类项目

    展开全文
  • 前几天我的闺蜜晨曦跟我抱怨,自己把每天的待办事项添加到手机日历中,但是因为在忙别的工作,所以就错过手机日历上的提醒了。于是晨曦说,如果能够把手机日历日程添加到桌面上显示就好了,问我有没有什么好的手机...
  • 待办事项列表是一个相当典型的数据结构,再设计数据结构时,显然应该用面向对象的思路触发操作。 基本样式和交互 第一个问题就是高度自填充。 和宽度一样,一个元素要在父级高度有数值时才能设定百分比高度。 ...
  • 待办清单-iOS项目说明

    2021-01-26 22:05:54
    1.功能与ViewController介绍(补充图) 1. 查看已有待办分类,并可以新增、...2. 每个分类中有它的待办清单,可以新增、编辑待办事项,并可选择提醒时间、是否提醒 可以点击行来标记是否完成该事项,这是ChecklistsV
  • 我试图创建一个简单的待办事项应用程序,用户应该能够创建具有自己的待办事项集合的项目 . 然后将每个项目的待办事项分类为 initial , WIP 和 finished . 可通过路径 projects/:id 查看项目,其中 id 是项目的ID . ...
  • Django项目之个人网站 ...功能:用户工作事项记录,定计划、待办事项、已办事项、事项归档。 用户可以通过点击“添加”来添加事项,点击“取消”来删除事项等。 用户可以对事项进行分类。 二、界面 1、...
  • 在iPhone手机上,有闹钟、日历和提醒事项三个软件都可以用来提醒日程待办事项,比如上午十点要开会,可以设置一个9:50的闹铃,闹铃震动时便可以准备开会的相关东西;也可以在日历上设置10:00开会,5分钟前提醒;...
  • 手机电脑同步云提醒便签会员支持添加多个不同便签分类,还可以开启钉钉提醒,通过钉钉群接收设置提醒时间的便签待办事项。目前,手机电脑同步云便签暂不支持按分类提醒钉钉群,如有需要可选择将设置为重要事项的待办...
  • 那么有哪些软件支持建立分类框,分门别类地记录工作中的待办事项呢?Windows电脑上可使用的敬业签是一款支持手机电脑多端同步的便签软件,在使用时可以根据记录事项的不同创建不同的分类框来使用,下面给大家演示下...
  • Bienvenida! :waving_hand: ...Donde encontrar待办事项 La tarea deldesafíoes construir la web con losdiseñosdentro de la carpeta /design 。 Dentro vas a encontrar tanto laversiónmobile como desk
  • 因为敬业签的功能更完善,比如它有“分类”功能,支持VIP会员创建更多分类记录待办事项(白银VIP会员支持创建7个分类,黄金VIP会员支持创建50个分类)。而且,软件非常人性化:为了充分保障用户的个人隐私,软件还专门...
  • 那么有哪些软件支持建立分类框,分门别类地记录工作中的待办事项呢?Windows电脑上可使用的敬业签是一款支持手机电脑多端同步的便签软件,在使用时可以根据记录事项的不同创建不同的分类框来使用,下面给大家演示下...
  • react 代办事项,基础入门学习,待办的增加、删除、修改等 操作。包含react 基础知识的概括, React实现Todolist练习 (上)
  • iPhone手机中可以用来记录待办事项和计划安排的工具有很多可以选择,其中功能比较全面的是敬业签。新版敬业签的排序功能比较人性化,有多重维度可以选择,比如只看已完成的内容,iPhone手机便签软件敬业签如何只看...
  • iPhone手机中可以用来记录待办事项和计划安排的工具有很多可以选择,其中功能比较全面的是敬业签。新版敬业签的排序功能比较人性化,有多重维度可以选择,比如只看已完成的内容,iPhone手机便签软件敬业签如何只看...
  • React-Todo-源码

    2021-02-15 04:19:05
    您的工作是编写组件以完成“待办事项列表”应用程序。 您的待办事项列表应该功能齐全,并且可以根据需要进行设计。 随时在这里发挥创意。 我提供了一个gif,供您查看MVP功能是什么。 您的待办事项数据应该是一系列...
  • 这一小节里,我们会给待办事项加上分类,并且这个分类可以让用户自己创建维护。我们需要先创建一个新的模型 TodoCategory,然后将它和待办事项关联起来: # models.py class TodoCategory(models.M...
  • 手机便签敬业签中不仅可以分类、条添加文字内容来记事,还可以添加待办事项并设置提醒,不过有的用户不知道已经设置提醒的待办事项,如果需要修改提醒时间应该怎么操作呢?下面我们就以在安卓荣耀v30Pro手机上操作...
  • vue.js实战案例:实现todolist

    千次阅读 2018-06-25 11:16:00
    实现页面如下图所示,的比较仔细,可以将待办事项与未完成事项分开。下面上图↓↓↓↓↓这里只附上todolist.vue的代码,全部代码可以去
  • 首次上架App Store的观影神器《番茄影视》IOS / 安卓《番茄影视》一款刚开发出来不久的观影神器。目前已换壳上架App Store。同时它还支持安卓系统。...首次打开显示为待办事项类软件关闭软件重新打开,即可进...
  • 对于大多数女生来说,自己每天需要做...作为一款云便签,不仅支持我们创建不同的分类、条添加文字内容来记事,而且支持我们添加待办事项并设置提醒,例如定时提醒、重复提醒、重要事项提醒和公历农历提醒等都是可设置
  • |简体中文 基于Gin + Vue + Element UI的前一级分离权限管理系统 系统初始化极度简单,只需要配置文件中,修改数据库连接,系统启动后会自动初始化数据库信息以及必须的...待办事项:单元测试 :wrapped_gift:内置 用户
  • 第一节:初识Angular-CLI第二节:登录组件的构建第三节:建立一个待办事项应用第四节:进化!模块化你的应用第五节:多用户版本的待办事项应用第六节:使用第三方样式库及模块优化用第七节:给组件带来活力Rx--隐藏...
  • 用户可以录入日记。每条日记可以选择分类:普通;待办事项;已处理事项;大事件。用户可以修改、删除自己的日记。缺省显示当日的、登录用户自己的日记内容,但是用户可以根据日期导航功能,选择以前的日期来查看日记

空空如也

空空如也

1 2 3 4 5 ... 9
收藏数 172
精华内容 68
关键字:

待办事项分