redux

2020 年你应该知道的 React 库

和自甴很熟 提交于 2021-02-16 07:29:44
声明:本文为译文,原文链接:https://www.robinwieruch.de/react-libraries React 已经诞生很久了,自从它诞生开始,围绕组件驱动形成了一个非常全面的生态,但是来自其他编程语言或者框架的开发人员很难找到要构建一个 React 系统的所有组件。如果你是来自于像 Angular 这样的框架的开发者,你可能已经习惯了框架包含了所需要的所有功能, 然而对于 React 来说,它的核心并不是完善所有的可选库。这是优势还是劣势取决于你自己。当我从 Angular 切换到 React,我绝对经历了它作为 React 的优势。 只有通过 React,您才能使用函数组件和 props 构建组件驱动的用户界面。它带有一些内置的解决方案,例如,用于本地状态和副作用的 React Hooks。 下面的文章将向您提供一些自己总结的方法,以便从补充库中进行选择,从而构建一个全面的 React 应用程序。 如何开始 React 如果你是一个完全不熟悉 React 的初学者想创建一个 React 项目,加入 React 的世界。有许多工具包项目可以选择,每个项目都试图满足不同的需求。React 社区的现状是通过 Facebook 的 create-react-app(CRA)。它提供了一个零配置的设置,并给你一个开箱即用并且简单的启动和运行的 React 应用程序

杀手级的TypeScript功能:const断言[每日前端夜话0x6F]

断了今生、忘了曾经 提交于 2021-02-14 15:32:52
每日前端夜话 0x6F 每日前端夜话,陪你聊前端。 每天晚上18:00准时推送。 正文共:1916 字 预计阅读时间: 6 分钟 翻译:疯狂的技术宅 来源: logrocket 我发现官方的 TypeScript 文档非常有用,但是总觉得有点过于学术化并且枯燥无味。每当我发现一个新功能时,我想要知道这个功能究竟能够解决什么问题而不是长篇大论。 在我看来, const assertions 是 TypeScript 3.4 的杀手级新功能,正如我稍后将要解释的,我们可以用这个新功能省略很多繁琐的类型声明。 const 断言 1 const x = { text: "hello" } as const; 官方文档中给出了这样的解释: TypeScript 3.4 引入了一个名为 const 断言的字面值的新构造。它的语法是一个类型断言,用 const 代替类型名称(例如 123 as const )断言构造新的文字表达式时,我们可以向语言发出以下信号: 该表达式中的字面类型不应被扩展(例如:不能从“hello”转换为字符串) 对象字面量获取只读属性 数组文字成为只读元组 感觉有点枯燥,还有点混乱。让我们来各个击破。 没有类型扩展的字面类型 并不是每个人都知道类型扩展,并且由于某些意外行为而首次发现它时都会觉得意外。 当我们使用关键字 const 声明一个字面量时,类型是等号右边的文字

深入浅出TypeScript(5)- 在React项目中使用TypeScript

强颜欢笑 提交于 2021-02-13 14:53:15
前言 在 第二小节 中,我们讨论了利用TypeScript创建Web项目的实现,在本下节,我们讨论一下如何结合React创建一个具备TypeScript类型的应用项目。 准备 Webpack配置在第二小节项目的基础上做了一些修改, 添加React相关依赖:react、react-dom、@types/react 和@types/react-dom 修改Webpack配置文件 修改webpack.base.config.js,其余文件和第二小节保持一致,修改如下: const HtmlWebpackPlugin = require('html-webpack-plugin') module.exports = { entry: { 'app': './src/index.tsx' }, output: { filename: '[name].[chunkhash:8].js' }, resolve: { extensions: ['.js', '.ts', '.tsx'] }, module: { rules: [ { test: /\.tsx?$/i, use: [{ loader: 'ts-loader' }], exclude: /node_modules/ } ] }, plugins: [ new HtmlWebpackPlugin({ template: './src

使用TypeScript创建React Native

久未见 提交于 2021-02-13 14:05:52
⒈初始化 React Native环境   参考 https://reactnative.cn/docs/getting-started.html ⒉安装React Native官方的脚手架工具 npm install -g @react-native-community/cli ⒊使用React Native脚手架初始化项目 #默认是JavaScript npx react - native init ts_react_native #可以直接使用TypeScript初始化 npx react -native init ts_react_native --template react-native-template-typescript ⒋安装watchman   watchman用于监控React Native项目中文件的变动,经常有开发者忘记安装watchman而导致项目无法启动的情况 cd ts_react_native y watchman ⒌更改项目为TypeScript环境   1.将TypeScript以及React Native和Jest的类型添加到您的项目中。 yarn add typescript @types/jest @types/react @types/react-native @types/react-test- renderer # or for

How to store the data in React state after Querying it from GraphQL?

ⅰ亾dé卋堺 提交于 2021-02-11 15:51:19
问题 Following is my Query: import React from 'react'; import getProducts from '../queries/getProduct'; import { Query } from "react-apollo"; export const Product = () => { const proId = { "productId": "95eb601f2d13" } return ( <Query query={getProducts} variables={proId}> {({ loading, error, data }) => { if (loading) return "Loading..."; if (error) return `Error! ${error.message}`; return ( <div> {data.map(entry => entry)} </div> ); }} </Query> ); }; export default Product; I need to now store

How to store the data in React state after Querying it from GraphQL?

坚强是说给别人听的谎言 提交于 2021-02-11 15:49:08
问题 Following is my Query: import React from 'react'; import getProducts from '../queries/getProduct'; import { Query } from "react-apollo"; export const Product = () => { const proId = { "productId": "95eb601f2d13" } return ( <Query query={getProducts} variables={proId}> {({ loading, error, data }) => { if (loading) return "Loading..."; if (error) return `Error! ${error.message}`; return ( <div> {data.map(entry => entry)} </div> ); }} </Query> ); }; export default Product; I need to now store

How to store the data in React state after Querying it from GraphQL?

牧云@^-^@ 提交于 2021-02-11 15:48:50
问题 Following is my Query: import React from 'react'; import getProducts from '../queries/getProduct'; import { Query } from "react-apollo"; export const Product = () => { const proId = { "productId": "95eb601f2d13" } return ( <Query query={getProducts} variables={proId}> {({ loading, error, data }) => { if (loading) return "Loading..."; if (error) return `Error! ${error.message}`; return ( <div> {data.map(entry => entry)} </div> ); }} </Query> ); }; export default Product; I need to now store

React pagination in componentDidMount()

*爱你&永不变心* 提交于 2021-02-11 14:59:55
问题 I'm working on a blog-like website and there is a page called PageDetail with the post and comments. I fetch the comments with redux and set the state. componentDidMount() { this.props.fetchComments(this.props.match.params.id) this.setCommentsForCurrentPage() } My state is shown as below to do the pagination. state = { currentPage: 0, offset: 0, slicedComments: [], } My slice function is as below. setCommentsForCurrentPage() { let slicedComments = this.props.comments .slice(this.state.offset,

Dynamically navigating between stacks with react-navigation 5

依然范特西╮ 提交于 2021-02-11 14:22:47
问题 I'm trying to dynamically navigate between stacks via a single fetch from a server, which reads a token from the device, and makes a server request to update isUserExists. if isUserExists is false, render AuthStack, otherwise render AppStack. My code: Example for AuthStack.js : import React from "react"; import { createStackNavigator } from "@react-navigation/stack"; import { Auth, Registration, Login, VerifyAuth } from "../../screens/auth"; const Stack = createStackNavigator(); const

A 'yield' expression is only allowed in a generator body

戏子无情 提交于 2021-02-11 13:47:42
问题 I'm using redux-saga to fetch server api data. My question is that I'm trying to design following code. However yield put(get01Action(members)); which is commented out has following Syntax error. A 'yield' expression is only allowed in a generator body. I don't know how to manage it. import '@babel/polyfill'; import { fork, take, put } from 'redux-saga/effects'; import axios from "axios"; export function* rootSaga(){ yield fork(fetch01); yield fork(fetch02); } function* fetch01() { while