- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
嘿,我想在页面之间传递数据。有两个组件,<ResultToolbar />
和 <ComparisonTable />
.工具栏包含一个 <Link/>
组件,当它被点击时,它将重定向到 <ComparisonTable />
通过数据。数据传输是通过传递 Prop qnaObject
完成的。进入链接组件。但是当传递 link 属性时,链接不起作用(comparisonTable 页面没有显示,但 url 确实发生了变化)。当我不通过链接组件传递任何数据时,页面重定向工作正常(url 更改并且出现比较表页面)。知道为什么吗?
这是我的 <ResultToolbar />
组件:
import React from 'react';
import { Link } from 'react-router-dom';
class ResultToolbar extends React.Component {
render() {
let {
qnaObject,
compareQuery,
compareTo,
onCompare,
quantity,
} = this.props;
return (
<div id='result-toolbar'>
<div id='toolbar-container'>
<div id='toolbar-compare-container'>
<Link
to={{ ***this doesn't work***
pathname: `${compareTo}/compare${compareQuery}`,
qnaObject: qnaObject,
}}
onClick={onCompare}
// to={`${compareTo}/compare${compareQuery}`} ***this works perfectly***
>
<button id='compare-button'>
Compare
{quantity === 0 ? '' : ` (${quantity})`}
</button>
</Link>
</div>
</div>
</div>
);
}
}
export default ResultToolbar;
这是我的 <ComparisonTable />
组件:
import ComparisonEntry from './ComparisonEntry';
import ComparisonHeading from './ComparisonHeading';
import TitleBox from '../SearchResult/TitleBox';
import {
EmailIn,
PassIn,
TextIn,
NumberIn,
Button,
} from './../SearchForm/FormElements';
class ComparisonTable extends React.Component {
constructor(props) {
super(props);
this.state = {
products: [],
atrs: [],
atrsDesc: [],
swap: [],
loading: true,
category: '',
catDesc: '',
buyClicked: false,
qnaObject: {},
};
this.getEntries = this.getEntries.bind(this);
this.handleBuy = this.handleBuy.bind(this);
this.handleBack = this.handleBack.bind(this);
}
getEntries = async () => {
this.setState({
loading: true,
});
const response = await fetch(
this.props.location.pathname + this.props.location.search
);
const body = await response.json();
return body;
};
componentDidMount() {
this.getEntries()
.then((resolve) =>
this.setState({
loading: false,
products: resolve.products,
atrs: resolve.atrs,
atrsDesc: resolve.atrsDesc,
category: resolve.category,
catDesc: resolve.description,
})
)
.catch((err) => console.log(err));
}
handleBuy(event) {
event.preventDefault();
let toBuy = this.state.products.find(
(item) => item.id === Number(event.target.name)
);
this.setState({
swap: this.state.products,
products: [toBuy],
buyClicked: true,
});
}
handleBack(event) {
event.preventDefault();
let toBuy = [];
this.setState({
products: this.state.swap,
swap: toBuy,
buyClicked: false,
});
}
render() {
console.log(this.props.location.qnaObject);
let highlightEntry = true;
let comparisonEntries = this.state.atrs.map((item, index) => {
highlightEntry = !highlightEntry; //this is to alternate the shades on each entry to enhance readability
return (
<ComparisonEntry
key={index}
attribute={item}
description={this.state.atrsDesc[index]}
comparees={this.state.products}
color={highlightEntry}
/>
);
});
return (
<div id='comparison-page'>
<TitleBox title={this.state.category} text={this.state.catDesc} />
<div id='comp-sub-container'>
<div id='comp-table-order-container'>
<div id='comparison-table'>
<div
id='review-reminder'
style={{ display: this.state.buyClicked ? 'block' : 'none' }}
>
Check the product below
</div>
<ComparisonHeading
dispButt={this.state.buyClicked}
comparees={this.state.products}
onBuy={this.handleBuy}
onBack={this.handleBack}
/>
{comparisonEntries}
<div
className='loader'
style={{
display: this.state.loading ? 'block' : 'none',
margin: '10rem 5rem',
}}
></div>
</div>
<div
id='order-page'
style={{
display: this.state.buyClicked ? 'inline-flex' : 'none',
}}
>
<div id='order-page-container'>
<EmailIn label='Email' />
<TextIn label='Name' />
<PassIn label='password' />
<NumberIn label='number' />
<Button label='buy' />
</div>
</div>
</div>
</div>
</div>
);
}
}
export default ComparisonTable;
最佳答案
如果您尝试在从 Link
发生的路由推送中传递数据,那么您需要在正确的属性中传递它。
An object that can have any of the following properties:
pathname
: A string representing the path to link to.search
: A string representation of query parameters.hash
: A hash to put in the URL, e.g. #a-hash.state
: State to persist to the location.
<Link
to={{
pathname: `${compareTo}/compare${compareQuery}`,
state: { qnaObject },
}}
onClick={onCompare}
>
在接收路由上访问
props.location.state.qnaObject
关于reactjs - <Link/> 组件在我将 Prop 传递给它时停止工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63149711/
我错过了什么,我已完成 的安装指南中要求的所有步骤 native 脚本 运行 tns doctor 给我以下输出... C:\abc\xyz>tns doctor √ Getting environm
尝试从 {addToCart(book)}}/>}> 传递数据至}> 问题: 购物车 ( render={()=> ) 收到 null,但没有收到我尝试发送的对象 已放置“console.log...
这是 _app.tsx 的外观: function MyApp({ Component, pageProps }: AppProps) { return } 我在构建项目时遇到了这个错误: Ty
我的 Laravel Vue 组件收到以下警告: [Vue warn]: Avoid mutating a prop directly since the value will be overwrit
根据这个example更详细this one我刚刚遇到了一件奇怪的事情...... 如果我使用方法作为 addTab(title,icon,component) 并且下一步想使用 setTabComp
目前我有一个捕获登录数据的表单,一个带有 TIWDBGrid 的表单,它应该返回与我从我的 mysql 数据库登录时创建的 user_id 关联的任何主机,以及一个共享数据模块。 下面是我的登录页面代
在我的react-native应用程序中,我目前有一个本地Android View (用java编写)正确渲染。当我尝试将我的react-native javascript 组件之一放入其中时,出现以
我为作业编写了简单的代码。我引用了文档和几个 youtube 视频教程系列。我的 react 代码是正确的我在运行代码时没有收到任何错误。但是这些 react-boostrap 元素没有渲染。此代码仅
几周前我刚刚开始使用 Flow,从一周前开始我就遇到了 Flow 错误,我不知道如何修复。 代码如下: // @flow import React, { Component } from "react
我想在同一个 View 中加载不同的 web2py 组件,但不是同时加载。我有 5 个 .load 文件,它们具有用于不同场景的表单字段,这些文件由 onchange 选择脚本动态调用。 web2py
关闭。这个问题是opinion-based .它目前不接受答案。 想改善这个问题吗?更新问题,以便可以通过 editing this post 用事实和引文回答问题. 6年前关闭。 Improve t
Blazor 有 InputNumber将输入限制为数字的组件。然而,这呈现了一个 firefox 不尊重(它允许任何文本)。 所以我尝试创建一个过滤输入的自定义组件: @inherits Inpu
我在学习 AngularDART 组件时编写了以下简单代码,但没有显示任何内容,任何人都可以帮助我知道我犯了什么错误: 我的 html 主文件:
我想在初始安装组件时或之后为 div 设置动画(淡入)。动画完成后,div 不应消失。我正在尝试使用 CSSTransition 组件并查看 reactcommunity.org 上的示例,但我根本无
我需要一个 JSF 组件来表示甘特图。是否有任何组件库(如 RichFaces)包含这样的组件? 最佳答案 JFreeChart有甘特图和PrimeFaces有一个图像组件,允许您动态地流式传输内容。
从软件工程的角度来看,组件、模块和子系统之间有什么区别? 提前致谢! 最佳答案 以下是 UML 2.5 的一些发现: 组件:该子句指定一组结构,可用于定义任意大小和复杂性的软件系统。特别是,它将组件指
我有使用非托管程序集(名为 unmanaged.dll)的托管应用程序(名为 managed.exe)。到目前为止,我们已经创建了 Interop.unmanaged.dll,managed.exe
我有一个跨多个应用程序复制的 DAL(我知道它的设计很糟糕,但现在忽略它),我想做的是这个...... 创建一个将通过所有桌面应用程序访问的 WCF DAL 组件。任何人都可以分享他们对关注的想法吗?
我有一个 ComboBox 的集合声明如下。 val cmbAll = for (i /** action here **/ } 所有这些都放在一个 TabbedPane 中。我想这不是问题。那么我
使用 VB6 创建一个 VB 应用程序。应用程序的一部分显示内部的闪存。 当我使用 printform它只是打印整个应用程序。我不知道如何单独打印闪光部分。任何帮助,将不胜感激!.. 谢谢。 最佳答案
我是一名优秀的程序员,十分优秀!