Commit fe0f27b0 authored by mayi's avatar mayi
Browse files

运用redux react-redux

parent 6ee8216e
[{"D:\\code\\reactTravel\\travel2162\\src\\index.tsx":"1","D:\\code\\reactTravel\\travel2162\\src\\App.tsx":"2","D:\\code\\reactTravel\\travel2162\\src\\components\\Header\\Header.tsx":"3","D:\\code\\reactTravel\\travel2162\\src\\components\\Footer\\Footer.tsx":"4","D:\\code\\reactTravel\\travel2162\\src\\components\\index.ts":"5","D:\\code\\reactTravel\\travel2162\\src\\components\\Header\\index.ts":"6","D:\\code\\reactTravel\\travel2162\\src\\components\\Footer\\index.ts":"7","D:\\code\\reactTravel\\travel2162\\src\\components\\sideMenu\\index.ts":"8","D:\\code\\reactTravel\\travel2162\\src\\components\\carousel\\index.ts":"9","D:\\code\\reactTravel\\travel2162\\src\\components\\sideMenu\\SideMenu.tsx":"10","D:\\code\\reactTravel\\travel2162\\src\\components\\carousel\\carousel.tsx":"11","D:\\code\\reactTravel\\travel2162\\src\\components\\sideMenu\\mockup.ts":"12","D:\\code\\reactTravel\\travel2162\\src\\components\\productionCollection\\index.ts":"13","D:\\code\\reactTravel\\travel2162\\src\\components\\productionCollection\\productionCollection.tsx":"14","D:\\code\\reactTravel\\travel2162\\src\\components\\productionCollection\\productImage.tsx":"15","D:\\code\\reactTravel\\travel2162\\src\\components\\business\\index.ts":"16","D:\\code\\reactTravel\\travel2162\\src\\components\\business\\bussiness.tsx":"17","D:\\code\\reactTravel\\travel2162\\src\\pages\\index.ts":"18","D:\\code\\reactTravel\\travel2162\\src\\pages\\Home\\index.ts":"19","D:\\code\\reactTravel\\travel2162\\src\\pages\\Home\\home.tsx":"20","D:\\code\\reactTravel\\travel2162\\src\\pages\\Home\\mockups.ts":"21","D:\\code\\reactTravel\\travel2162\\src\\pages\\register\\index.ts":"22","D:\\code\\reactTravel\\travel2162\\src\\pages\\signin\\index.ts":"23","D:\\code\\reactTravel\\travel2162\\src\\pages\\register\\register.tsx":"24","D:\\code\\reactTravel\\travel2162\\src\\pages\\signin\\signin.tsx":"25","D:\\code\\reactTravel\\travel2162\\src\\pages\\detail\\index.ts":"26","D:\\code\\reactTravel\\travel2162\\src\\pages\\detail\\detail.tsx":"27"},{"size":249,"mtime":1622622628850,"results":"28","hashOfConfig":"29"},{"size":744,"mtime":1622697935143,"results":"30","hashOfConfig":"29"},{"size":2981,"mtime":1622699498212,"results":"31","hashOfConfig":"29"},{"size":397,"mtime":1622624780064,"results":"32","hashOfConfig":"29"},{"size":174,"mtime":1622687520514,"results":"33","hashOfConfig":"29"},{"size":24,"mtime":1622624777072,"results":"34","hashOfConfig":"29"},{"size":24,"mtime":1622624779387,"results":"35","hashOfConfig":"29"},{"size":26,"mtime":1622680972119,"results":"36","hashOfConfig":"29"},{"size":26,"mtime":1622681990791,"results":"37","hashOfConfig":"29"},{"size":1221,"mtime":1622682447523,"results":"38","hashOfConfig":"29"},{"size":607,"mtime":1622682193215,"results":"39","hashOfConfig":"29"},{"size":3293,"mtime":1622682220312,"results":"40","hashOfConfig":"29"},{"size":38,"mtime":1622685541148,"results":"41","hashOfConfig":"29"},{"size":3883,"mtime":1622699519599,"results":"42","hashOfConfig":"29"},{"size":984,"mtime":1622699670900,"results":"43","hashOfConfig":"29"},{"size":27,"mtime":1622688158324,"results":"44","hashOfConfig":"29"},{"size":1392,"mtime":1622689645731,"results":"45","hashOfConfig":"29"},{"size":101,"mtime":1622697795743,"results":"46","hashOfConfig":"29"},{"size":22,"mtime":1622695066653,"results":"47","hashOfConfig":"29"},{"size":2087,"mtime":1622695329068,"results":"48","hashOfConfig":"29"},{"size":6945,"mtime":1622689191039,"results":"49","hashOfConfig":"29"},{"size":26,"mtime":1622696658119,"results":"50","hashOfConfig":"29"},{"size":24,"mtime":1622696661468,"results":"51","hashOfConfig":"29"},{"size":238,"mtime":1622696729218,"results":"52","hashOfConfig":"29"},{"size":254,"mtime":1622697071055,"results":"53","hashOfConfig":"29"},{"size":24,"mtime":1622697778294,"results":"54","hashOfConfig":"29"},{"size":360,"mtime":1622697776894,"results":"55","hashOfConfig":"29"},{"filePath":"56","messages":"57","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},"1yicyq7",{"filePath":"58","messages":"59","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"60","messages":"61","errorCount":0,"warningCount":4,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"62","messages":"63","errorCount":0,"warningCount":5,"fixableErrorCount":0,"fixableWarningCount":0,"source":"64","usedDeprecatedRules":"65"},{"filePath":"66","messages":"67","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"65"},{"filePath":"68","messages":"69","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"65"},{"filePath":"70","messages":"71","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"65"},{"filePath":"72","messages":"73","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"65"},{"filePath":"74","messages":"75","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"65"},{"filePath":"76","messages":"77","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"65"},{"filePath":"78","messages":"79","errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":"80","usedDeprecatedRules":"65"},{"filePath":"81","messages":"82","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"65"},{"filePath":"83","messages":"84","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"65"},{"filePath":"85","messages":"86","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"87","messages":"88","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"89","messages":"90","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"65"},{"filePath":"91","messages":"92","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"65"},{"filePath":"93","messages":"94","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"95","messages":"96","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"65"},{"filePath":"97","messages":"98","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"65"},{"filePath":"99","messages":"100","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"65"},{"filePath":"101","messages":"102","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"103","messages":"104","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"105","messages":"106","errorCount":0,"warningCount":2,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"107","messages":"108","errorCount":0,"warningCount":2,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"109","messages":"110","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"111","messages":"112","errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},"D:\\code\\reactTravel\\travel2162\\src\\index.tsx",[],"D:\\code\\reactTravel\\travel2162\\src\\App.tsx",[],"D:\\code\\reactTravel\\travel2162\\src\\components\\Header\\Header.tsx",["113","114","115","116"],"D:\\code\\reactTravel\\travel2162\\src\\components\\Footer\\Footer.tsx",["117","118","119","120","121"],"import * as React from \"react\";\r\nimport { Component } from \"react\";\r\nimport { Layout, Typography, Input, Menu, Button, Dropdown } from \"antd\";\r\n\r\n\r\n\r\n\r\nexport const Footer: React.FC = () => {\r\n return <>\r\n <Layout.Footer>\r\n <Typography.Title level={3} style={{textAlign: 'center'}}>\r\n 版权所有 @ React 旅游网\r\n </Typography.Title>\r\n </Layout.Footer></>;\r\n};\r\n",["122","123"],"D:\\code\\reactTravel\\travel2162\\src\\components\\index.ts",[],"D:\\code\\reactTravel\\travel2162\\src\\components\\Header\\index.ts",[],"D:\\code\\reactTravel\\travel2162\\src\\components\\Footer\\index.ts",[],"D:\\code\\reactTravel\\travel2162\\src\\components\\sideMenu\\index.ts",[],"D:\\code\\reactTravel\\travel2162\\src\\components\\carousel\\index.ts",[],"D:\\code\\reactTravel\\travel2162\\src\\components\\sideMenu\\SideMenu.tsx",[],"D:\\code\\reactTravel\\travel2162\\src\\components\\carousel\\carousel.tsx",["124"],"import * as React from \"react\";\r\nimport { Component } from \"react\";\r\nimport styles from \"./carousel.module.css\";\r\nimport { Image, Carousel as AntdCarousel } from \"antd\";\r\nimport Carouse1 from \"../../assets/images/carousel_1.jpg\";\r\nimport Carouse2 from \"../../assets/images/carousel_2.jpg\";\r\nimport Carouse3 from \"../../assets/images/carousel_3.jpg\";\r\nexport const Carouseee: React.FC = () => {\r\n return (\r\n <AntdCarousel autoplay className={styles.slider}>\r\n <Image src={Carouse1}></Image>\r\n <Image src={Carouse2}></Image>\r\n <Image src={Carouse3}></Image>\r\n </AntdCarousel>\r\n );\r\n};\r\n","D:\\code\\reactTravel\\travel2162\\src\\components\\sideMenu\\mockup.ts",[],"D:\\code\\reactTravel\\travel2162\\src\\components\\productionCollection\\index.ts",[],"D:\\code\\reactTravel\\travel2162\\src\\components\\productionCollection\\productionCollection.tsx",[],"D:\\code\\reactTravel\\travel2162\\src\\components\\productionCollection\\productImage.tsx",[],"D:\\code\\reactTravel\\travel2162\\src\\components\\business\\index.ts",[],"D:\\code\\reactTravel\\travel2162\\src\\components\\business\\bussiness.tsx",[],"D:\\code\\reactTravel\\travel2162\\src\\pages\\index.ts",[],"D:\\code\\reactTravel\\travel2162\\src\\pages\\Home\\index.ts",[],"D:\\code\\reactTravel\\travel2162\\src\\pages\\Home\\home.tsx",[],"D:\\code\\reactTravel\\travel2162\\src\\pages\\Home\\mockups.ts",[],"D:\\code\\reactTravel\\travel2162\\src\\pages\\register\\index.ts",[],"D:\\code\\reactTravel\\travel2162\\src\\pages\\signin\\index.ts",[],"D:\\code\\reactTravel\\travel2162\\src\\pages\\register\\register.tsx",["125","126"],"D:\\code\\reactTravel\\travel2162\\src\\pages\\signin\\signin.tsx",["127","128"],"D:\\code\\reactTravel\\travel2162\\src\\pages\\detail\\index.ts",[],"D:\\code\\reactTravel\\travel2162\\src\\pages\\detail\\detail.tsx",["129"],{"ruleId":"130","severity":1,"message":"131","line":2,"column":10,"nodeType":"132","messageId":"133","endLine":2,"endColumn":19},{"ruleId":"130","severity":1,"message":"134","line":16,"column":9,"nodeType":"132","messageId":"133","endLine":16,"endColumn":15},{"ruleId":"130","severity":1,"message":"135","line":17,"column":9,"nodeType":"132","messageId":"133","endLine":17,"endColumn":17},{"ruleId":"130","severity":1,"message":"136","line":18,"column":9,"nodeType":"132","messageId":"133","endLine":18,"endColumn":14},{"ruleId":"130","severity":1,"message":"131","line":2,"column":10,"nodeType":"132","messageId":"133","endLine":2,"endColumn":19},{"ruleId":"130","severity":1,"message":"137","line":3,"column":30,"nodeType":"132","messageId":"133","endLine":3,"endColumn":35},{"ruleId":"130","severity":1,"message":"138","line":3,"column":37,"nodeType":"132","messageId":"133","endLine":3,"endColumn":41},{"ruleId":"130","severity":1,"message":"139","line":3,"column":43,"nodeType":"132","messageId":"133","endLine":3,"endColumn":49},{"ruleId":"130","severity":1,"message":"140","line":3,"column":51,"nodeType":"132","messageId":"133","endLine":3,"endColumn":59},{"ruleId":"141","replacedBy":"142"},{"ruleId":"143","replacedBy":"144"},{"ruleId":"130","severity":1,"message":"131","line":2,"column":10,"nodeType":"132","messageId":"133","endLine":2,"endColumn":19},{"ruleId":"130","severity":1,"message":"131","line":2,"column":10,"nodeType":"132","messageId":"133","endLine":2,"endColumn":19},{"ruleId":"130","severity":1,"message":"145","line":3,"column":8,"nodeType":"132","messageId":"133","endLine":3,"endColumn":14},{"ruleId":"130","severity":1,"message":"131","line":2,"column":10,"nodeType":"132","messageId":"133","endLine":2,"endColumn":19},{"ruleId":"130","severity":1,"message":"145","line":3,"column":8,"nodeType":"132","messageId":"133","endLine":3,"endColumn":14},{"ruleId":"130","severity":1,"message":"131","line":2,"column":10,"nodeType":"132","messageId":"133","endLine":2,"endColumn":19},"@typescript-eslint/no-unused-vars","'Component' is defined but never used.","Identifier","unusedVar","'params' is assigned a value but never used.","'location' is assigned a value but never used.","'match' is assigned a value but never used.","'Input' is defined but never used.","'Menu' is defined but never used.","'Button' is defined but never used.","'Dropdown' is defined but never used.","no-native-reassign",["146"],"no-negated-in-lhs",["147"],"'styles' is defined but never used.","no-global-assign","no-unsafe-negation"]
\ No newline at end of file
[{"D:\\code\\reactTravel\\travel2162\\src\\index.tsx":"1","D:\\code\\reactTravel\\travel2162\\src\\App.tsx":"2","D:\\code\\reactTravel\\travel2162\\src\\components\\Header\\Header.tsx":"3","D:\\code\\reactTravel\\travel2162\\src\\components\\Footer\\Footer.tsx":"4","D:\\code\\reactTravel\\travel2162\\src\\components\\index.ts":"5","D:\\code\\reactTravel\\travel2162\\src\\components\\Header\\index.ts":"6","D:\\code\\reactTravel\\travel2162\\src\\components\\Footer\\index.ts":"7","D:\\code\\reactTravel\\travel2162\\src\\components\\sideMenu\\index.ts":"8","D:\\code\\reactTravel\\travel2162\\src\\components\\carousel\\index.ts":"9","D:\\code\\reactTravel\\travel2162\\src\\components\\sideMenu\\SideMenu.tsx":"10","D:\\code\\reactTravel\\travel2162\\src\\components\\carousel\\carousel.tsx":"11","D:\\code\\reactTravel\\travel2162\\src\\components\\sideMenu\\mockup.ts":"12","D:\\code\\reactTravel\\travel2162\\src\\components\\productionCollection\\index.ts":"13","D:\\code\\reactTravel\\travel2162\\src\\components\\productionCollection\\productionCollection.tsx":"14","D:\\code\\reactTravel\\travel2162\\src\\components\\productionCollection\\productImage.tsx":"15","D:\\code\\reactTravel\\travel2162\\src\\components\\business\\index.ts":"16","D:\\code\\reactTravel\\travel2162\\src\\components\\business\\bussiness.tsx":"17","D:\\code\\reactTravel\\travel2162\\src\\pages\\index.ts":"18","D:\\code\\reactTravel\\travel2162\\src\\pages\\Home\\index.ts":"19","D:\\code\\reactTravel\\travel2162\\src\\pages\\Home\\home.tsx":"20","D:\\code\\reactTravel\\travel2162\\src\\pages\\Home\\mockups.ts":"21","D:\\code\\reactTravel\\travel2162\\src\\pages\\register\\index.ts":"22","D:\\code\\reactTravel\\travel2162\\src\\pages\\signin\\index.ts":"23","D:\\code\\reactTravel\\travel2162\\src\\pages\\register\\register.tsx":"24","D:\\code\\reactTravel\\travel2162\\src\\pages\\signin\\signin.tsx":"25","D:\\code\\reactTravel\\travel2162\\src\\pages\\detail\\index.ts":"26","D:\\code\\reactTravel\\travel2162\\src\\pages\\detail\\detail.tsx":"27","D:\\code\\reactTravel\\travel2162\\src\\components\\Header\\HeaderClass.tsx":"28","D:\\code\\reactTravel\\travel2162\\src\\redux\\store.ts":"29","D:\\code\\reactTravel\\travel2162\\src\\i18n\\configs.ts":"30","D:\\code\\reactTravel\\travel2162\\src\\redux\\language\\language.ts":"31","D:\\code\\reactTravel\\travel2162\\src\\redux\\language\\languageActions.ts":"32"},{"size":395,"mtime":1622710680745,"results":"33","hashOfConfig":"34"},{"size":744,"mtime":1622697935143,"results":"35","hashOfConfig":"34"},{"size":3000,"mtime":1622700899294,"results":"36","hashOfConfig":"34"},{"size":463,"mtime":1622707864128,"results":"37","hashOfConfig":"34"},{"size":174,"mtime":1622687520514,"results":"38","hashOfConfig":"34"},{"size":29,"mtime":1622702068974,"results":"39","hashOfConfig":"34"},{"size":24,"mtime":1622624779387,"results":"40","hashOfConfig":"34"},{"size":26,"mtime":1622680972119,"results":"41","hashOfConfig":"34"},{"size":26,"mtime":1622681990791,"results":"42","hashOfConfig":"34"},{"size":1221,"mtime":1622682447523,"results":"43","hashOfConfig":"34"},{"size":607,"mtime":1622682193215,"results":"44","hashOfConfig":"34"},{"size":3293,"mtime":1622682220312,"results":"45","hashOfConfig":"34"},{"size":38,"mtime":1622685541148,"results":"46","hashOfConfig":"34"},{"size":3883,"mtime":1622699519599,"results":"47","hashOfConfig":"34"},{"size":984,"mtime":1622699670900,"results":"48","hashOfConfig":"34"},{"size":27,"mtime":1622688158324,"results":"49","hashOfConfig":"34"},{"size":1392,"mtime":1622689645731,"results":"50","hashOfConfig":"34"},{"size":101,"mtime":1622697795743,"results":"51","hashOfConfig":"34"},{"size":22,"mtime":1622695066653,"results":"52","hashOfConfig":"34"},{"size":2316,"mtime":1622707730321,"results":"53","hashOfConfig":"34"},{"size":6945,"mtime":1622689191039,"results":"54","hashOfConfig":"34"},{"size":26,"mtime":1622696658119,"results":"55","hashOfConfig":"34"},{"size":24,"mtime":1622696661468,"results":"56","hashOfConfig":"34"},{"size":238,"mtime":1622696729218,"results":"57","hashOfConfig":"34"},{"size":254,"mtime":1622697071055,"results":"58","hashOfConfig":"34"},{"size":24,"mtime":1622697778294,"results":"59","hashOfConfig":"34"},{"size":360,"mtime":1622697776894,"results":"60","hashOfConfig":"34"},{"size":4583,"mtime":1622712103696,"results":"61","hashOfConfig":"34"},{"size":222,"mtime":1622711804618,"results":"62","hashOfConfig":"34"},{"size":621,"mtime":1622707691438,"results":"63","hashOfConfig":"34"},{"size":891,"mtime":1622709631258,"results":"64","hashOfConfig":"34"},{"size":831,"mtime":1622710683031,"results":"65","hashOfConfig":"34"},{"filePath":"66","messages":"67","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},"1yicyq7",{"filePath":"68","messages":"69","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"70"},{"filePath":"71","messages":"72","errorCount":0,"warningCount":4,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"73","messages":"74","errorCount":0,"warningCount":5,"fixableErrorCount":0,"fixableWarningCount":0,"source":"75","usedDeprecatedRules":"70"},{"filePath":"76","messages":"77","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"70"},{"filePath":"78","messages":"79","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"70"},{"filePath":"80","messages":"81","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"70"},{"filePath":"82","messages":"83","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"70"},{"filePath":"84","messages":"85","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"70"},{"filePath":"86","messages":"87","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"70"},{"filePath":"88","messages":"89","errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":"90","usedDeprecatedRules":"70"},{"filePath":"91","messages":"92","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"70"},{"filePath":"93","messages":"94","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"70"},{"filePath":"95","messages":"96","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"70"},{"filePath":"97","messages":"98","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"70"},{"filePath":"99","messages":"100","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"70"},{"filePath":"101","messages":"102","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"70"},{"filePath":"103","messages":"104","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"70"},{"filePath":"105","messages":"106","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"70"},{"filePath":"107","messages":"108","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"70"},{"filePath":"109","messages":"110","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"70"},{"filePath":"111","messages":"112","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"70"},{"filePath":"113","messages":"114","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"70"},{"filePath":"115","messages":"116","errorCount":0,"warningCount":2,"fixableErrorCount":0,"fixableWarningCount":0,"source":"117","usedDeprecatedRules":"70"},{"filePath":"118","messages":"119","errorCount":0,"warningCount":2,"fixableErrorCount":0,"fixableWarningCount":0,"source":"120","usedDeprecatedRules":"70"},{"filePath":"121","messages":"122","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"70"},{"filePath":"123","messages":"124","errorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":"125","usedDeprecatedRules":"70"},{"filePath":"126","messages":"127","errorCount":0,"warningCount":2,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"128","messages":"129","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"130","messages":"131","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"70"},{"filePath":"132","messages":"133","errorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":"70"},{"filePath":"134","messages":"135","errorCount":0,"warningCount":3,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},"D:\\code\\reactTravel\\travel2162\\src\\index.tsx",[],"D:\\code\\reactTravel\\travel2162\\src\\App.tsx",[],["136","137"],"D:\\code\\reactTravel\\travel2162\\src\\components\\Header\\Header.tsx",["138","139","140","141"],"D:\\code\\reactTravel\\travel2162\\src\\components\\Footer\\Footer.tsx",["142","143","144","145","146"],"import * as React from \"react\";\r\nimport { Component } from \"react\";\r\nimport { Layout, Typography, Input, Menu, Button, Dropdown } from \"antd\";\r\n\r\nimport { useTranslation } from \"react-i18next\";\r\n\r\n\r\nexport const Footer: React.FC = () => {\r\nconst {t} = useTranslation();\r\n return <>\r\n <Layout.Footer>\r\n <Typography.Title level={3} style={{textAlign: 'center'}}>\r\n {t('footer.detail')}\r\n </Typography.Title>\r\n </Layout.Footer></>;\r\n};\r\n","D:\\code\\reactTravel\\travel2162\\src\\components\\index.ts",[],"D:\\code\\reactTravel\\travel2162\\src\\components\\Header\\index.ts",[],"D:\\code\\reactTravel\\travel2162\\src\\components\\Footer\\index.ts",[],"D:\\code\\reactTravel\\travel2162\\src\\components\\sideMenu\\index.ts",[],"D:\\code\\reactTravel\\travel2162\\src\\components\\carousel\\index.ts",[],"D:\\code\\reactTravel\\travel2162\\src\\components\\sideMenu\\SideMenu.tsx",[],"D:\\code\\reactTravel\\travel2162\\src\\components\\carousel\\carousel.tsx",["147"],"import * as React from \"react\";\r\nimport { Component } from \"react\";\r\nimport styles from \"./carousel.module.css\";\r\nimport { Image, Carousel as AntdCarousel } from \"antd\";\r\nimport Carouse1 from \"../../assets/images/carousel_1.jpg\";\r\nimport Carouse2 from \"../../assets/images/carousel_2.jpg\";\r\nimport Carouse3 from \"../../assets/images/carousel_3.jpg\";\r\nexport const Carouseee: React.FC = () => {\r\n return (\r\n <AntdCarousel autoplay className={styles.slider}>\r\n <Image src={Carouse1}></Image>\r\n <Image src={Carouse2}></Image>\r\n <Image src={Carouse3}></Image>\r\n </AntdCarousel>\r\n );\r\n};\r\n","D:\\code\\reactTravel\\travel2162\\src\\components\\sideMenu\\mockup.ts",[],"D:\\code\\reactTravel\\travel2162\\src\\components\\productionCollection\\index.ts",[],"D:\\code\\reactTravel\\travel2162\\src\\components\\productionCollection\\productionCollection.tsx",[],"D:\\code\\reactTravel\\travel2162\\src\\components\\productionCollection\\productImage.tsx",[],"D:\\code\\reactTravel\\travel2162\\src\\components\\business\\index.ts",[],"D:\\code\\reactTravel\\travel2162\\src\\components\\business\\bussiness.tsx",[],"D:\\code\\reactTravel\\travel2162\\src\\pages\\index.ts",[],"D:\\code\\reactTravel\\travel2162\\src\\pages\\Home\\index.ts",[],"D:\\code\\reactTravel\\travel2162\\src\\pages\\Home\\home.tsx",[],"D:\\code\\reactTravel\\travel2162\\src\\pages\\Home\\mockups.ts",[],"D:\\code\\reactTravel\\travel2162\\src\\pages\\register\\index.ts",[],"D:\\code\\reactTravel\\travel2162\\src\\pages\\signin\\index.ts",[],"D:\\code\\reactTravel\\travel2162\\src\\pages\\register\\register.tsx",["148","149"],"import * as React from \"react\";\r\nimport { Component } from \"react\";\r\nimport styles from \"./register.module.css\";\r\nexport const Register: React.FC = () => {\r\n return (\r\n <>\r\n {\" \"}\r\n <h1>注册页面</h1>\r\n </>\r\n );\r\n};\r\n","D:\\code\\reactTravel\\travel2162\\src\\pages\\signin\\signin.tsx",["150","151"],"import * as React from \"react\";\r\nimport { Component } from \"react\";\r\nimport styles from \"./signin.module.css\";\r\nexport const SignInPage: React.FC = (props) => {\r\n console.log(props)\r\n return (\r\n <>\r\n <h1>登陆页面</h1>\r\n </>\r\n );\r\n};\r\n","D:\\code\\reactTravel\\travel2162\\src\\pages\\detail\\index.ts",[],"D:\\code\\reactTravel\\travel2162\\src\\pages\\detail\\detail.tsx",["152"],"import * as React from 'react';\r\nimport { Component } from 'react';\r\nimport {RouteComponentProps} from 'react-router-dom';\r\ninterface MatchParams {\r\n tourisRouteId:string\r\n}\r\n export const Deatil:React.FC<RouteComponentProps<MatchParams>> =(props)=>{\r\n return(\r\n <h1>xiangqinguemian,路线id:{props.match.params.tourisRouteId}</h1>\r\n )\r\n }","D:\\code\\reactTravel\\travel2162\\src\\components\\Header\\HeaderClass.tsx",["153","154"],"D:\\code\\reactTravel\\travel2162\\src\\redux\\store.ts",[],"D:\\code\\reactTravel\\travel2162\\src\\i18n\\configs.ts",[],"D:\\code\\reactTravel\\travel2162\\src\\redux\\language\\language.ts",[],"D:\\code\\reactTravel\\travel2162\\src\\redux\\language\\languageActions.ts",["155","156","157"],{"ruleId":"158","replacedBy":"159"},{"ruleId":"160","replacedBy":"161"},{"ruleId":"162","severity":1,"message":"163","line":3,"column":10,"nodeType":"164","messageId":"165","endLine":3,"endColumn":19},{"ruleId":"162","severity":1,"message":"166","line":17,"column":9,"nodeType":"164","messageId":"165","endLine":17,"endColumn":15},{"ruleId":"162","severity":1,"message":"167","line":18,"column":9,"nodeType":"164","messageId":"165","endLine":18,"endColumn":17},{"ruleId":"162","severity":1,"message":"168","line":19,"column":9,"nodeType":"164","messageId":"165","endLine":19,"endColumn":14},{"ruleId":"162","severity":1,"message":"163","line":2,"column":10,"nodeType":"164","messageId":"165","endLine":2,"endColumn":19},{"ruleId":"162","severity":1,"message":"169","line":3,"column":30,"nodeType":"164","messageId":"165","endLine":3,"endColumn":35},{"ruleId":"162","severity":1,"message":"170","line":3,"column":37,"nodeType":"164","messageId":"165","endLine":3,"endColumn":41},{"ruleId":"162","severity":1,"message":"171","line":3,"column":43,"nodeType":"164","messageId":"165","endLine":3,"endColumn":49},{"ruleId":"162","severity":1,"message":"172","line":3,"column":51,"nodeType":"164","messageId":"165","endLine":3,"endColumn":59},{"ruleId":"162","severity":1,"message":"163","line":2,"column":10,"nodeType":"164","messageId":"165","endLine":2,"endColumn":19},{"ruleId":"162","severity":1,"message":"163","line":2,"column":10,"nodeType":"164","messageId":"165","endLine":2,"endColumn":19},{"ruleId":"162","severity":1,"message":"173","line":3,"column":8,"nodeType":"164","messageId":"165","endLine":3,"endColumn":14},{"ruleId":"162","severity":1,"message":"163","line":2,"column":10,"nodeType":"164","messageId":"165","endLine":2,"endColumn":19},{"ruleId":"162","severity":1,"message":"173","line":3,"column":8,"nodeType":"164","messageId":"165","endLine":3,"endColumn":14},{"ruleId":"162","severity":1,"message":"163","line":2,"column":10,"nodeType":"164","messageId":"165","endLine":2,"endColumn":19},{"ruleId":"162","severity":1,"message":"163","line":3,"column":10,"nodeType":"164","messageId":"165","endLine":3,"endColumn":19},{"ruleId":"162","severity":1,"message":"174","line":20,"column":3,"nodeType":"164","messageId":"165","endLine":20,"endColumn":16},{"ruleId":"162","severity":1,"message":"175","line":1,"column":8,"nodeType":"164","messageId":"165","endLine":1,"endColumn":16},{"ruleId":"176","severity":1,"message":"177","line":18,"column":14,"nodeType":"164","messageId":"178","endLine":18,"endColumn":41},{"ruleId":"176","severity":1,"message":"179","line":27,"column":14,"nodeType":"164","messageId":"178","endLine":27,"endColumn":38},"no-native-reassign",["180"],"no-negated-in-lhs",["181"],"@typescript-eslint/no-unused-vars","'Component' is defined but never used.","Identifier","unusedVar","'params' is assigned a value but never used.","'location' is assigned a value but never used.","'match' is assigned a value but never used.","'Input' is defined but never used.","'Menu' is defined but never used.","'Button' is defined but never used.","'Dropdown' is defined but never used.","'styles' is defined but never used.","'MenuItemProps' is defined but never used.","'language' is defined but never used.","@typescript-eslint/no-redeclare","'changeLanguageActionCreator' is already defined.","redeclared","'addLanguageActionCreator' is already defined.","no-global-assign","no-unsafe-negation"]
\ No newline at end of file
......@@ -7246,6 +7246,14 @@
"terser": "^4.6.3"
}
},
"html-parse-stringify": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/html-parse-stringify/-/html-parse-stringify-3.0.1.tgz",
"integrity": "sha512-KknJ50kTInJ7qIScF3jeaFRpMpE8/lfiTdzf/twXyPBLAGrLRTmkz3AdTnKeh40X8k9L2fdYwEp/42WGXIRGcg==",
"requires": {
"void-elements": "3.1.0"
}
},
"html-webpack-plugin": {
"version": "4.5.0",
"resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-4.5.0.tgz",
......@@ -7473,6 +7481,14 @@
"resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz",
"integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw=="
},
"i18next": {
"version": "20.3.1",
"resolved": "https://registry.npmjs.org/i18next/-/i18next-20.3.1.tgz",
"integrity": "sha512-WTY07KreR5z2LBSzAIKs05zpR5tgUT98C4fD96e7Risbc/HZePwF6AEnb9VkjdeSeRn9PDqQBay7ZkphuXt0Xw==",
"requires": {
"@babel/runtime": "^7.12.0"
}
},
"iconv-lite": {
"version": "0.4.24",
"resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
......@@ -12607,6 +12623,25 @@
"resolved": "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-6.0.8.tgz",
"integrity": "sha512-HvPuUQnLp5H7TouGq3kzBeioJmXms1wHy9EGjz2OURWBp4qZO6AfGEcnxts1D/CbwPLRAgTMPCEgYhA3sEM4vw=="
},
"react-i18next": {
"version": "11.10.0",
"resolved": "https://registry.npmjs.org/react-i18next/-/react-i18next-11.10.0.tgz",
"integrity": "sha512-Vn0Xw2MczBZHKciWdayx4J+P3S9Im2FWIzUPV2O7iUVFqIOhMv6o9mVTJN1gEi/MA2FZzorjvaEijglCMeehZQ==",
"requires": {
"@babel/runtime": "^7.14.0",
"html-parse-stringify": "^3.0.1"
},
"dependencies": {
"@babel/runtime": {
"version": "7.14.0",
"resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.14.0.tgz",
"integrity": "sha512-JELkvo/DlpNdJ7dlyw/eY7E0suy5i5GQH+Vlxaq1nsNJ+H7f4Vtv3jMeCEgRhZZQFXTjldYfQgv2qmM6M1v5wA==",
"requires": {
"regenerator-runtime": "^0.13.4"
}
}
}
},
"react-is": {
"version": "16.13.1",
"resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz",
......@@ -15400,6 +15435,11 @@
"resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz",
"integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ=="
},
"void-elements": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/void-elements/-/void-elements-3.1.0.tgz",
"integrity": "sha1-YU9/v42AHwu18GYfWy9XhXUOTwk="
},
"w3c-hr-time": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz",
......
......@@ -2,14 +2,15 @@ import * as React from "react";
import { Component } from "react";
import { Layout, Typography, Input, Menu, Button, Dropdown } from "antd";
import { useTranslation } from "react-i18next";
export const Footer: React.FC = () => {
const {t} = useTranslation();
return <>
<Layout.Footer>
<Typography.Title level={3} style={{textAlign: 'center'}}>
版权所有 @ React 旅游网
{t('footer.detail')}
</Typography.Title>
</Layout.Footer></>;
};
//函数式组件
import * as React from "react";
import { Component } from "react";
import logo from "../../assets/logo.svg";
......
//类组件
import * as React from "react";
import { Component } from "react";
import logo from "../../assets/logo.svg";
import styles from "./Header.module.css";
import { withTranslation, WithTranslation } from "react-i18next";
import { connect } from "react-redux";
import { Dispatch } from "redux";
import {
changeLanguageActionCreator,
addLanguageActionCreator,
} from "../../redux/language/languageActions";
import {
Layout,
Typography,
Input,
Menu,
Button,
Dropdown,
MenuItemProps,
} from "antd";
import { GlobalOutlined } from "@ant-design/icons";
import { withRouter, RouteComponentProps } from "react-router-dom";
import { RootState } from "../../redux/store";
const mapStateToProps = (state: RootState) => {
return {
language: state.language,
languageList: state.languageList,
};
};
const mapDispatchToProps =(dispatch:Dispatch) =>{
return{
changeLanguage:(code:'en'|'zh')=>{
const action =changeLanguageActionCreator(code)
dispatch(action)
},
addLanguage:(name:string,code:string)=>{
const action = addLanguageActionCreator(name,code)
dispatch(action)
}
}
}
class HeaderComponent extends React.Component<
RouteComponentProps & WithTranslation & ReturnType<typeof mapStateToProps>&ReturnType<typeof mapDispatchToProps>
> {
changeLanguage = (e) => {
if (e.key === "new") {
this.props.addLanguage("新语言", "新语言");
} else {
this.props.changeLanguage(e.key);
}
};
render() {
const { t } = this.props;
console.log(this.props);
const { history } = this.props;
return (
<>
<div className={styles["app-header"]}>
{/* top-header */}
<div className={styles["top-header"]}>
<div className={styles["inner"]}>
<Typography.Text>{t("header.slogan")}</Typography.Text>
<Dropdown.Button
style={{ marginLeft: 15 }}
overlay={
<Menu onClick={this.changeLanguage}>
{this.props.languageList.map((item, index) => (
<Menu.Item key={item.code}>{item.name}</Menu.Item>
))}
<Menu.Item key={"new"}>{t("header.slogan")}</Menu.Item>
</Menu>
}
icon={<GlobalOutlined />}
>
{this.props.language === "zh" ? "中文" : "English"}
</Dropdown.Button>
<Button.Group className={styles["button-group"]}>
<Button onClick={() => history.push("/register")}>
{t("header.register")}
</Button>
<Button onClick={() => history.push("/signin")}>登陆</Button>
</Button.Group>
</div>
</div>
<Layout.Header className={styles["main-header"]}>
<span>
<img src={logo} alt="logo" className={styles["App-logo"]} />
<Typography.Title level={3} className={styles.title}>
{t("header.title")}
</Typography.Title>
</span>
<Input.Search
placeholder={"请输入旅游目的地、主题、或关键字"}
className={styles["search-input"]}
/>
</Layout.Header>
<Menu mode={"horizontal"} className={styles["main-menu"]}>
<Menu.Item key={1}>旅游首页</Menu.Item>
<Menu.Item key={2}>周末游</Menu.Item>
<Menu.Item key={3}>跟团游</Menu.Item>
<Menu.Item key="4"> 自由行 </Menu.Item>
<Menu.Item key="5"> 私家团 </Menu.Item>
<Menu.Item key="6"> 邮轮 </Menu.Item>
<Menu.Item key="7"> 酒店+景点 </Menu.Item>
<Menu.Item key="8"> 当地玩乐 </Menu.Item>
<Menu.Item key="9"> 主题游 </Menu.Item>
<Menu.Item key="10"> 定制游 </Menu.Item>
<Menu.Item key="11"> 游学 </Menu.Item>
<Menu.Item key="12"> 签证 </Menu.Item>
<Menu.Item key="13"> 企业游 </Menu.Item>
<Menu.Item key="14"> 高端游 </Menu.Item>
<Menu.Item key="15"> 爱玩户外 </Menu.Item>
<Menu.Item key="16"> 保险 </Menu.Item>
</Menu>
</div>
</>
);
}
}
export const Header = connect(mapStateToProps,mapDispatchToProps)(
withTranslation()(withRouter(HeaderComponent))
);
export * from './Header'
\ No newline at end of file
export * from './HeaderClass'
\ No newline at end of file
import * as React from "react";
import {withRouter,RouteComponentProps} from 'react-router-dom'
import { withRouter, RouteComponentProps } from "react-router-dom";
import { Typography, Image } from "antd";
interface PropsType extends RouteComponentProps {
id: string | number;
......@@ -9,7 +9,7 @@ interface PropsType extends RouteComponentProps {
title: string;
}
const ProductImageComponent: React.FC<PropsType> = ({
const ProductImageComponent: React.FC<PropsType> = ({
id,
size,
imageSrc,
......@@ -17,10 +17,10 @@ interface PropsType extends RouteComponentProps {
title,
history,
location,
match
match,
}) => {
return (
<div onClick={()=>history.push(`detail/${id}`)}>
<div onClick={() => history.push(`detail/${id}`)}>
{size === "large" ? (
<Image src={imageSrc} height={280} width={480} />
) : (
......@@ -35,4 +35,4 @@ interface PropsType extends RouteComponentProps {
</div>
);
};
export const ProductImage = withRouter(ProductImageComponent)
\ No newline at end of file
export const ProductImage = withRouter(ProductImageComponent);
import i18n from "i18next";
import { initReactI18next } from "react-i18next";
import translation_en from "./en.json";
import translation_zh from "./zh.json";
const resources = {
en: {
translation: translation_en,
},
zh: {
translation: translation_zh,
},
};
i18n
.use(initReactI18next) // passes i18n down to react-i18next
.init({
resources,
lng: "zh",
// keySeparator: false, // we do not use keys in form messages.welcome
// header.slogan
interpolation: {
escapeValue: false, // react already safes from xss
},
});
export default i18n;
{
"header": {
"slogan": "Make travel happier",
"add_new_language": "add new language",
"title": "React Travel",
"register":"Register",
"signin":"Sign In",
"home_page": "Home",
"weekend": "Weekend",
"group": "Group",
"backpack": "Backpack",
"private": "Private",
"cruise": "Cruise",
"hotel": "Hotel & Attractions",
"local": "Local",
"theme": "Theme",
"custom": "Custom",
"study": "Study",
"visa":"Visa",
"enterprise":"Enterprise",
"high_end":"High-end",
"outdoor":"Outdoor",
"insurance":"Insurance"
},
"footer": {
"detail" : "All rights reserved @ ReactTravel.com"
},
"home_page": {
"hot_recommended": "Hot Recommended",
"new_arrival": "New arrival",
"domestic_travel": "Domestic travel",
"joint_venture": "Joint Venture",
"start_from": "(start from)"
}
}
\ No newline at end of file
{
"header": {
"slogan": "让旅行更幸福",
"add_new_language": "添加新语言",
"title": "React 旅游网",
"register":"注册",
"signin":"登陆",
"home_page": "旅游首页",
"weekend": "周末游",
"group": "跟团游",
"backpack": "自由行",
"private": "私家团",
"cruise": "邮轮",
"hotel": "酒店+景点",
"local": "当地玩乐",
"theme": "主题游",
"custom": "定制游",
"study": "游学",
"visa":"签证",
"enterprise":"企业游",
"high_end":"高端游",
"outdoor":"爱玩户外",
"insurance":"保险"
},
"footer": {
"detail" : "版权所有 @ React 旅游网"
},
"home_page": {
"hot_recommended": "爆款推荐",
"new_arrival": "新品上市",
"domestic_travel": "国内游推荐",
"joint_venture": "合作企业",
"start_from": "(起)"
}
}
\ No newline at end of file
import React from 'react';
import ReactDOM from 'react-dom';
import './index.css';
import App from './App';
import 'antd/dist/antd.css'
import React from "react";
import ReactDOM from "react-dom";
import "./index.css";
import App from "./App";
import "./i18n/configs";
import "antd/dist/antd.css";
import { Provider } from "react-redux";
import store from "./redux/store";
ReactDOM.render(
<React.StrictMode>
<App />
<Provider store={store}>
<App />
</Provider>
</React.StrictMode>,
document.getElementById('root')
document.getElementById("root")
);
import * as React from "react";
// import { Component } from "react";
import {withTranslation,WithTranslation} from 'react-i18next'
import {
Header,
Footer,
......@@ -15,12 +16,13 @@ import sideImage2 from "../../assets/images/sider_2019_02-04.png";
import sideImage3 from "../../assets/images/sider_2019_12-09.png";
import { Row, Col, Typography } from "antd";
export class HomePage extends React.Component {
export class HomePageComponent extends React.Component<WithTranslation> {
// constructor(props: HomePageProps) {
// super(props);
// this.state = { : };
// }
render() {
const {t} = this.props
return (
<>
<Header />
......@@ -42,7 +44,7 @@ export class HomePage extends React.Component {
<ProductCollection
title={
<Typography.Title level={3} type="warning">
爆款推荐
{t("home_page.hot_recommended")}
</Typography.Title>
}
sideImage={sideImage1}
......@@ -51,7 +53,7 @@ export class HomePage extends React.Component {
<ProductCollection
title={
<Typography.Title level={3} type="danger">
新品上市
{t("home_page.new_arrival")}
</Typography.Title>
}
sideImage={sideImage2}
......@@ -60,7 +62,7 @@ export class HomePage extends React.Component {
<ProductCollection
title={
<Typography.Title level={3} type="success">
国内游推荐
{t("home_page.domestic_travel")}
</Typography.Title>
}
sideImage={sideImage3}
......@@ -76,3 +78,4 @@ export class HomePage extends React.Component {
}
export const HomePage =withTranslation()(HomePageComponent)
\ No newline at end of file
import i18n from "i18next";
import {CHANGE_LANGUAGE,ADD_LANGUAGE,languageActionTypes} from './languageActions'
export interface LanguageState {
language: "en" | "zh";
languageList: { name: string; code: string }[];
}
const defaultState: LanguageState = {
language: "zh",
languageList: [
{ name: "中文", code: "zh" },
{ name: "English", code: "en" },
],
};
// eslint-disable-next-line import/no-anonymous-default-export
export default (state = defaultState, action:languageActionTypes) => {
switch (action.type) {
case CHANGE_LANGUAGE:
i18n.changeLanguage(action.payload);//此处会导致不是纯函数
return { ...state, language: action.payload };
case ADD_LANGUAGE:
return {
...state,
languageList: [...state.languageList, action.payload],
};
default:
return state;
}
};
import language from "./language";
export const CHANGE_LANGUAGE = "changeLanguage";
export const ADD_LANGUAGE = "addLanguage";
interface changeLanguageActionCreator {
type: typeof CHANGE_LANGUAGE;
payload: "en" | "zh";
}
interface addLanguageActionCreator {
type: typeof ADD_LANGUAGE;
payload: { name: string; code: string };
}
export type languageActionTypes =
| changeLanguageActionCreator
| addLanguageActionCreator;
export const changeLanguageActionCreator = (
languageCode: "en" | "zh"
): changeLanguageActionCreator => {
return {
type: CHANGE_LANGUAGE,
payload: languageCode,
};
};
export const addLanguageActionCreator = (
name: string,
code: string
): addLanguageActionCreator => {
return {
type: ADD_LANGUAGE,
payload: { name, code },
};
};
import { createStore } from "redux";
import languageReducer from "./language/language";
const store = createStore(languageReducer);
export type RootState =ReturnType<typeof store.getState>
export default store;
......@@ -1192,7 +1192,7 @@
dependencies:
regenerator-runtime "^0.13.4"
 
"@babel/runtime@^7.1.2", "@babel/runtime@^7.10.1", "@babel/runtime@^7.10.2", "@babel/runtime@^7.10.4", "@babel/runtime@^7.11.1", "@babel/runtime@^7.11.2", "@babel/runtime@^7.12.1", "@babel/runtime@^7.12.5", "@babel/runtime@^7.5.5", "@babel/runtime@^7.7.2", "@babel/runtime@^7.8.4", "@babel/runtime@^7.9.2":
"@babel/runtime@^7.1.2", "@babel/runtime@^7.10.1", "@babel/runtime@^7.10.2", "@babel/runtime@^7.10.4", "@babel/runtime@^7.11.1", "@babel/runtime@^7.11.2", "@babel/runtime@^7.12.0", "@babel/runtime@^7.12.1", "@babel/runtime@^7.12.5", "@babel/runtime@^7.14.0", "@babel/runtime@^7.5.5", "@babel/runtime@^7.7.2", "@babel/runtime@^7.8.4", "@babel/runtime@^7.9.2":
version "7.14.0"
resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.14.0.tgz#46794bc20b612c5f75e62dd071e24dfd95f1cbe6"
integrity sha512-JELkvo/DlpNdJ7dlyw/eY7E0suy5i5GQH+Vlxaq1nsNJ+H7f4Vtv3jMeCEgRhZZQFXTjldYfQgv2qmM6M1v5wA==
......@@ -1810,6 +1810,14 @@
resolved "https://registry.yarnpkg.com/@types/history/-/history-4.7.8.tgz#49348387983075705fe8f4e02fb67f7daaec4934"
integrity sha512-S78QIYirQcUoo6UJZx9CSP0O2ix9IaeAXwQi26Rhr/+mg7qqPy8TzaxHSUut7eGjL8WmLccT7/MXf304WjqHcA==
 
"@types/hoist-non-react-statics@^3.3.0":
version "3.3.1"
resolved "https://registry.yarnpkg.com/@types/hoist-non-react-statics/-/hoist-non-react-statics-3.3.1.tgz#1124aafe5118cb591977aeb1ceaaed1070eb039f"
integrity sha512-iMIqiko6ooLrTh1joXodJK5X9xeEALT1kM5G3ZLhD3hszxBdIEd5C75U834D9mLcINgD4OyZf5uQXjkuYydWvA==
dependencies:
"@types/react" "*"
hoist-non-react-statics "^3.3.0"
"@types/html-minifier-terser@^5.0.0":
version "5.1.1"
resolved "https://registry.yarnpkg.com/@types/html-minifier-terser/-/html-minifier-terser-5.1.1.tgz#3c9ee980f1a10d6021ae6632ca3e79ca2ec4fb50"
......@@ -1899,6 +1907,16 @@
dependencies:
"@types/react" "^16"
 
"@types/react-redux@^7.1.16":
version "7.1.16"
resolved "https://registry.yarnpkg.com/@types/react-redux/-/react-redux-7.1.16.tgz#0fbd04c2500c12105494c83d4a3e45c084e3cb21"
integrity sha512-f/FKzIrZwZk7YEO9E1yoxIuDNRiDducxkFlkw/GNMGEnK9n4K8wJzlJBghpSuOVDgEUHoDkDF7Gi9lHNQR4siw==
dependencies:
"@types/hoist-non-react-statics" "^3.3.0"
"@types/react" "*"
hoist-non-react-statics "^3.3.0"
redux "^4.0.0"
"@types/react-router-dom@^5.1.7":
version "5.1.7"
resolved "https://registry.yarnpkg.com/@types/react-router-dom/-/react-router-dom-5.1.7.tgz#a126d9ea76079ffbbdb0d9225073eb5797ab7271"
......@@ -5669,7 +5687,7 @@ hmac-drbg@^1.0.1:
minimalistic-assert "^1.0.0"
minimalistic-crypto-utils "^1.0.1"
 
hoist-non-react-statics@^3.1.0:
hoist-non-react-statics@^3.1.0, hoist-non-react-statics@^3.3.0, hoist-non-react-statics@^3.3.2:
version "3.3.2"
resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz#ece0acaf71d62c2969c2ec59feff42a4b1a85b45"
integrity sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==
......@@ -5736,6 +5754,13 @@ html-minifier-terser@^5.0.1:
relateurl "^0.2.7"
terser "^4.6.3"
 
html-parse-stringify@^3.0.1:
version "3.0.1"
resolved "https://registry.yarnpkg.com/html-parse-stringify/-/html-parse-stringify-3.0.1.tgz#dfc1017347ce9f77c8141a507f233040c59c55d2"
integrity sha512-KknJ50kTInJ7qIScF3jeaFRpMpE8/lfiTdzf/twXyPBLAGrLRTmkz3AdTnKeh40X8k9L2fdYwEp/42WGXIRGcg==
dependencies:
void-elements "3.1.0"
html-webpack-plugin@4.5.0:
version "4.5.0"
resolved "https://registry.yarnpkg.com/html-webpack-plugin/-/html-webpack-plugin-4.5.0.tgz#625097650886b97ea5dae331c320e3238f6c121c"
......@@ -5851,6 +5876,13 @@ human-signals@^1.1.1:
resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-1.1.1.tgz#c5b1cd14f50aeae09ab6c59fe63ba3395fe4dfa3"
integrity sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==
 
i18next@^20.3.1:
version "20.3.1"
resolved "https://registry.yarnpkg.com/i18next/-/i18next-20.3.1.tgz#b51dd281a2eec8087753edf1727e160dac8a5554"
integrity sha512-WTY07KreR5z2LBSzAIKs05zpR5tgUT98C4fD96e7Risbc/HZePwF6AEnb9VkjdeSeRn9PDqQBay7ZkphuXt0Xw==
dependencies:
"@babel/runtime" "^7.12.0"
iconv-lite@0.4.24, iconv-lite@^0.4.4:
version "0.4.24"
resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b"
......@@ -9728,7 +9760,15 @@ react-error-overlay@^6.0.9:
resolved "https://registry.yarnpkg.com/react-error-overlay/-/react-error-overlay-6.0.9.tgz#3c743010c9359608c375ecd6bc76f35d93995b0a"
integrity sha512-nQTTcUu+ATDbrSD1BZHr5kgSD4oF8OFjxun8uAaL8RwPBacGBNPf/yAuVVdx17N8XNzRDMrZ9XcKZHCjPW+9ew==
 
react-is@^16.12.0, react-is@^16.6.0, react-is@^16.7.0, react-is@^16.8.1:
react-i18next@^11.10.0:
version "11.10.0"
resolved "https://registry.yarnpkg.com/react-i18next/-/react-i18next-11.10.0.tgz#f34257447e18e710e36d8fd3f721dd7d37c7004f"
integrity sha512-Vn0Xw2MczBZHKciWdayx4J+P3S9Im2FWIzUPV2O7iUVFqIOhMv6o9mVTJN1gEi/MA2FZzorjvaEijglCMeehZQ==
dependencies:
"@babel/runtime" "^7.14.0"
html-parse-stringify "^3.0.1"
react-is@^16.12.0, react-is@^16.13.1, react-is@^16.6.0, react-is@^16.7.0, react-is@^16.8.1:
version "16.13.1"
resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4"
integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==
......@@ -9738,6 +9778,18 @@ react-is@^17.0.1:
resolved "https://registry.yarnpkg.com/react-is/-/react-is-17.0.2.tgz#e691d4a8e9c789365655539ab372762b0efb54f0"
integrity sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==
 
react-redux@^7.2.4:
version "7.2.4"
resolved "https://registry.yarnpkg.com/react-redux/-/react-redux-7.2.4.tgz#1ebb474032b72d806de2e0519cd07761e222e225"
integrity sha512-hOQ5eOSkEJEXdpIKbnRyl04LhaWabkDPV+Ix97wqQX3T3d2NQ8DUblNXXtNMavc7DpswyQM6xfaN4HQDKNY2JA==
dependencies:
"@babel/runtime" "^7.12.1"
"@types/react-redux" "^7.1.16"
hoist-non-react-statics "^3.3.2"
loose-envify "^1.4.0"
prop-types "^15.7.2"
react-is "^16.13.1"
react-refresh@^0.8.3:
version "0.8.3"
resolved "https://registry.yarnpkg.com/react-refresh/-/react-refresh-0.8.3.tgz#721d4657672d400c5e3c75d063c4a85fb2d5d68f"
......@@ -9935,6 +9987,13 @@ redent@^3.0.0:
indent-string "^4.0.0"
strip-indent "^3.0.0"
 
redux@^4.0.0, redux@^4.1.0:
version "4.1.0"
resolved "https://registry.yarnpkg.com/redux/-/redux-4.1.0.tgz#eb049679f2f523c379f1aff345c8612f294c88d4"
integrity sha512-uI2dQN43zqLWCt6B/BMGRMY6db7TTY4qeHHfGeKb3EOhmOKjU3KdWvNLJyqaHRksv/ErdNH7cFZWg9jXtewy4g==
dependencies:
"@babel/runtime" "^7.9.2"
regenerate-unicode-properties@^8.2.0:
version "8.2.0"
resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz#e5de7111d655e7ba60c057dbe9ff37c87e65cdec"
......@@ -11716,6 +11775,11 @@ vm-browserify@^1.0.1:
resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-1.1.2.tgz#78641c488b8e6ca91a75f511e7a3b32a86e5dda0"
integrity sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==
 
void-elements@3.1.0:
version "3.1.0"
resolved "https://registry.yarnpkg.com/void-elements/-/void-elements-3.1.0.tgz#614f7fbf8d801f0bb5f0661f5b2f5785750e4f09"
integrity sha1-YU9/v42AHwu18GYfWy9XhXUOTwk=
w3c-hr-time@^1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz#0a89cdf5cc15822df9c360543676963e0cc308cd"
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment