如何在ReactJs/.Net中将我的状态传递给这个类组件?
长期潜伏者,第一次海报 我按照教程制作了一个带有ReactJs前端()的Asp.Net核心MVC应用程序。在完成教程后,我一直在向项目中添加其他功能,以了解我还可以用它做些什么 我的如何在ReactJs/.Net中将我的状态传递给这个类组件?,reactjs,asp.net-mvc,Reactjs,Asp.net Mvc,长期潜伏者,第一次海报 我按照教程制作了一个带有ReactJs前端()的Asp.Net核心MVC应用程序。在完成教程后,我一直在向项目中添加其他功能,以了解我还可以用它做些什么 我的组件组装了一个对象,并通过XmlHttpRequest将其发送到我的API控制器,该控制器将其保存到本地存储。控制器的submitur通过道具传入。这很有效 此后,我尝试将组件添加到中呈现的每个着色节点中,我打算以与组件大致相同的方式来处理这些节点。中呈现的每个colorNode都有自己的删除按钮,我希望组件从所选颜
组件组装了一个
对象,并通过XmlHttpRequest
将其发送到我的API控制器,该控制器将其保存到本地存储。控制器的submitur
通过道具传入。这很有效
此后,我尝试将
组件添加到
中呈现的每个着色节点中,我打算以与
组件大致相同的方式来处理这些节点。
中呈现的每个colorNode都有自己的删除按钮,我希望
组件从所选颜色中获取color.id
,并将其传递给API控制器上的softDelete操作,以便依次处理(它将按id查找颜色并向其附加DateDeleted,然后API将忽略DateDeleted!=null
)的任何颜色,
组件随后可以调用LoadColorsFromServer()
从存储中带回刷新的列表。我希望
以与添加表单相同的方式从props接收softDeleteUrl
当我在调试中运行项目时,softDeleteUrl
是未定义的,当我在浏览器中检查道具时,它不包含softDeleteUrl
。还有“颜色”是未定义的,所以我觉得我的
组件没有接收到道具或状态。我对道具/状态绑定的反应和概念上的挣扎还不太熟悉,所以我怀疑这是我问题的根源
如何将softDeleteUrl和颜色属性从要删除的
中传递到
组件?是否需要调用类似
的东西
我对此有点不知所措,任何建议都将不胜感激
谢谢
杰德
类colorDisplay扩展了React.Component{
建造师(道具){
超级(道具);
this.state={data:[]};
this.handleColourSubmit=this.handleColourSubmit.bind(this);
}
loadcolorsfromserver(){
const xhr=new XMLHttpRequest();
xhr.open('get',this.props.url,true);
xhr.onload=()=>{
const data=JSON.parse(xhr.responseText);
this.setState({data:data});
};
xhr.send();
}
handleColourSubmit(彩色){
const data=新表单数据();
data.append('name',color.name);
数据。附加(‘品牌’、颜色、品牌);
数据。附加(“到期日”、颜色。到期日);
data.append('serialNumber',color.serialNumber);
const xhr=new XMLHttpRequest();
xhr.open('post',this.props.submitur,true);
xhr.onload=()=>this.loadcolorsfromserver();
发送(数据);
}
componentDidMount(){
this.loadcolorsfromserver();
}
render(){
返回(
颜色
);
}
}
类colorlist扩展了React.Component{
render(){
const colorNodes=this.props.data.map(color=>)
品牌:{color.Brand}
Exp:{color.expiration}
序列号:{color.serialNumber}
添加日期:{color.dateAdded}
));
返回{colorNodes};
}
}
类SoftDeleteColor.Component{
建造师(道具){
超级(道具)
此.state={
颜色:这个。道具。颜色
};
}
手持设备(彩色){
var xhr=new XMLHttpRequest();
var url=this.props.softDeleteUrl+color.id;
xhr.open('DELETE',url,true);
xhr.onreadystatechange=()=>{
如果(xhr.status==204){
this.loadcolorsfromserver();
}
}
xhr.send();
}
render(){
报税表(
{this.handleDelete(this.state.color);}>删除
)
}
}
类AddColorForm扩展了React.Component{
建造师(道具){
超级(道具);
this.state={name:'',brand:'',expiration:'',serialNumber:''};
this.handleNameChange=this.handleNameChange.bind(this);
this.handleBrandChange=this.handleBrandChange.bind(this);
this.handleExpiryChange=this.handleExpiryChange.bind(this);
this.handleSerialNumberChange=this.handleSerialNumberChange.bind(this);
this.handleSubmit=this.handleSubmit.bind(this);
}
手形变化(e){
this.setState({name:e.target.value});
}
车把更换(e){
this.setState({brand:e.target.value});
}
handleExpiryChange(e){
this.setState({expiry:e.target.value});
}
HandleSerialNumber更改(e){
this.setState({serialNumber:e.target.value})
}
handleSubmit(e){
e、 预防默认值();
const name=this.state.name.trim();
const brand=this.state.brand.trim();
const expiry=this.state.expiry.trim();
const serialNumber=this.state.serialNumber.trim();
如果(!名称| | |!品牌| |!到期日| |!序列号){
返回;
}
this.props.oncloursubmit({
姓名:姓名,,
品牌:品牌,,
到期日:到期日,
serialNumber:serialNumber
})
这是我的国家({
名称:“”,
品牌:'',
到期日:'',
序列号:“”
});
}
render(){
返回(
在列表中添加颜色
class ColourDisplay extends React.Component {
constructor(props) {
super(props);
this.state = { data: [] };
this.handleColourSubmit = this.handleColourSubmit.bind(this);
}
loadColoursFromServer() {
const xhr = new XMLHttpRequest();
xhr.open('get', this.props.url, true);
xhr.onload = () => {
const data = JSON.parse(xhr.responseText);
this.setState({ data: data });
};
xhr.send();
}
handleColourSubmit(colour) {
const data = new FormData();
data.append('name', colour.name);
data.append('brand', colour.brand);
data.append('expiry', colour.expiry);
data.append('serialNumber', colour.serialNumber);
const xhr = new XMLHttpRequest();
xhr.open('post', this.props.submitUrl, true);
xhr.onload = () => this.loadColoursFromServer();
xhr.send(data);
}
componentDidMount() {
this.loadColoursFromServer();
}
render() {
return (
<div className="colourDisplay">
<h1>Colours</h1>
<ColourList data={this.state.data}/>
<AddColourForm onColourSubmit={this.handleColourSubmit}/>
</div>
);
}
}
class ColourList extends React.Component {
render() {
const colourNodes = this.props.data.map(colour => (
<Colour name={colour.name} key={colour.id}>
<div>Brand: {colour.brand}</div>
<div>Exp: {colour.expiry}</div>
<div>Serial #: {colour.serialNumber}</div>
<div>Date Added: {colour.dateAdded}</div>
<SoftDeleteColour />
</Colour>
));
return <div className="colourList">{colourNodes}</div>;
}
}
class SoftDeleteColour extends React.Component {
constructor(props) {
super(props)
this.state = {
colour: this.props.colour
};
}
HandleDeletion(colour) {
var xhr = new XMLHttpRequest();
var url = this.props.softDeleteUrl + colour.id;
xhr.open('DELETE', url, true);
xhr.onreadystatechange = () => {
if (xhr.status == 204) {
this.loadColoursFromServer();
}
}
xhr.send();
}
render() {
return (
<button onClick={() => { this.HandleDeletion(this.state.colour); }}>Delete</button>
)
}
}
class AddColourForm extends React.Component {
constructor(props) {
super(props);
this.state = { name: '', brand: '', expiry: '', serialNumber: '' };
this.handleNameChange = this.handleNameChange.bind(this);
this.handleBrandChange = this.handleBrandChange.bind(this);
this.handleExpiryChange = this.handleExpiryChange.bind(this);
this.handleSerialNumberChange = this.handleSerialNumberChange.bind(this);
this.handleSubmit = this.handleSubmit.bind(this);
}
handleNameChange(e) {
this.setState({ name: e.target.value });
}
handleBrandChange(e) {
this.setState({ brand: e.target.value });
}
handleExpiryChange(e) {
this.setState({ expiry: e.target.value });
}
handleSerialNumberChange(e) {
this.setState({ serialNumber: e.target.value })
}
handleSubmit(e) {
e.preventDefault();
const name = this.state.name.trim();
const brand = this.state.brand.trim();
const expiry = this.state.expiry.trim();
const serialNumber = this.state.serialNumber.trim();
if (!name || !brand || !expiry || !serialNumber) {
return;
}
this.props.onColourSubmit({
name: name,
brand: brand,
expiry: expiry,
serialNumber: serialNumber
})
this.setState({
name: '',
brand: '',
expiry: '',
serialNumber: ''
});
}
render() {
return (
<form className="addColourForm" onSubmit={this.handleSubmit}>
<h2>Add a colour to your list</h2>
<div>
<input
type="text"
placeholder="Colour"
value={this.state.name}
onChange={this.handleNameChange}
/>
</div>
<div>
<input
type="text"
placeholder="Brand"
value={this.state.brand}
onChange={this.handleBrandChange}
/>
</div>
<div>
<input
type="text"
placeholder="Expiry MM/YY"
value={this.state.expiry}
onChange={this.handleExpiryChange}
/>
</div>
<div>
<input
type="text"
placeholder="Serial #"
value={this.state.serialNumber}
onChange={this.handleSerialNumberChange}
/>
</div>
<input type="submit" value="Post" />
</form>
);
}
}
class Colour extends React.Component {
render() {
return (
<div className="colour">
<h2 className="colourName">{this.props.name}</h2>
{this.props.children}
</div>
);
}
}
ReactDOM.render(
<ColourDisplay
url="/colours"
submitUrl="/colours/new"
softDeleteUrl="/colours/softDelete"
/>,
document.getElementById('content')
);