无法在 ReactJS 中将 reponse.data 转换为字符串
Cannot convert reponse.data to string in ReactJS
import React, { Component } from 'react'
import TaskOneServices from '../services/TaskOneServices'
import circle from '../assets/icons/dry-clean.png'
import tick from '../assets/icons/check-mark.png'
async function showImage (taskId) {
var getStatus = (await TaskOneServices.getStatus(taskId))?.data;
JSON.stringify(getStatus);
console.log(typeof(getStatus)); //prints object
console.log(getStatus === "CREATED"); //prints false
if(getStatus === "CREATED") {
return (
<img className="img-lm" src={circle} alt="bullets" onClick={(ev) => {taskCompleted(ev, taskId)}}/>
)
} else {
return (
<img className="img-lm" src={tick} alt="checked" onClick={(ev) => {taskCompleted(ev, taskId)}}/>
)
}
}
function taskCompleted(e, taskid) {
if(e.target.getAttribute('src') === circle) {
e.target.setAttribute( 'src', tick);
e.target.setAttribute( 'alt', 'checked');
updateTask(taskid);
// strikeThroughFn(taskid);
} else {
e.target.setAttribute( 'src', circle);
e.target.setAttribute( 'alt', 'bullets');
updateTask(taskid);
}
}
function updateTask(id) {
JSON.stringify(id);
TaskOneServices.updateTask(id).then((response) => {
console.log(response)
});
}
export default class TaskListComponent extends Component {
constructor(props) {
super(props)
this.state = {
task_one:[],
}
this.deleteTask = this.deleteTask.bind(this)
// this.updateTask = this.updateTask.bind(this)
}
//------- showing error -------------
componentDidMount() {
TaskOneServices.getTasks().then((response) => {
this.setState({task_one: response.data})
});
}
//------- showing error -------------
deleteTask = (id) => {
JSON.stringify(id);
TaskOneServices.deleteTask(id).then((response) => {
this.refreshPage();
});
}
refreshPage = () => {
window.location.reload();
}
strikeThroughFn(taskid) {
// JSON.stringify(taskString);
console.log(taskid);
var fetchTask = document.getElementById('strikeTask');
fetchTask.innerHTML = <strike> + {taskid} + </strike>
}
render() {
return (
<div className="container-fluid bg-white">
<div className="row">
<table className="table border-bottom table-pad">
<tbody>
{
this.state.task_one.map(
task =>
<tr key = {task.id}>
<td width="60px">
{showImage(task.id)}
</td>
<td id="strikeTask">{task.task}</td>
<td width="60px">
<button type="button" className="close text-danger btn-close-style" onClick={() => this.deleteTask(task.id)}>
<span aria-hidden="true">×</span>
</button>
</td>
</tr>
)
}
</tbody>
</table>
</div>
</div>
)
}
}
我想比较 getStatus 和字符串“CREATED”,如果两者相等,我想 return 内部代码块。但是 getStatus 有一个对象类型,“CREATED”是一个字符串。所以它 return 是错误的。我试过 JSON.stringify() 但它仍然 return 是错误的。有什么方法可以将该对象转换为字符串?
您使用的是 promise,因此 .then() 将在您的函数之后触发,您希望等待 promise 的结果,因此请将 await 关键字与异步函数一起使用。
请记住,异步函数 return 也是一个 promise
async function showImage (taskId) {
var getStatus = (await TaskOneServices.getStatus(taskId))?.data;
JSON.stringify(getStatus);
console.log(typeof(getStatus)); //prints object
console.log(getStatus === "CREATED"); //prints false
if(getStatus === "CREATED") {
return (
<img className="img-lm" src={circle} alt="bullets" onClick={(ev) => {taskCompleted(ev, taskId)}}/>
)
} else {
return (
<img className="img-lm" src={tick} alt="checked" onClick={(ev) => {taskCompleted(ev, taskId)}}/>
)
}
}
import React, { Component } from 'react'
import TaskOneServices from '../services/TaskOneServices'
import circle from '../assets/icons/dry-clean.png'
import tick from '../assets/icons/check-mark.png'
async function showImage (taskId) {
var getStatus = (await TaskOneServices.getStatus(taskId))?.data;
JSON.stringify(getStatus);
console.log(typeof(getStatus)); //prints object
console.log(getStatus === "CREATED"); //prints false
if(getStatus === "CREATED") {
return (
<img className="img-lm" src={circle} alt="bullets" onClick={(ev) => {taskCompleted(ev, taskId)}}/>
)
} else {
return (
<img className="img-lm" src={tick} alt="checked" onClick={(ev) => {taskCompleted(ev, taskId)}}/>
)
}
}
function taskCompleted(e, taskid) {
if(e.target.getAttribute('src') === circle) {
e.target.setAttribute( 'src', tick);
e.target.setAttribute( 'alt', 'checked');
updateTask(taskid);
// strikeThroughFn(taskid);
} else {
e.target.setAttribute( 'src', circle);
e.target.setAttribute( 'alt', 'bullets');
updateTask(taskid);
}
}
function updateTask(id) {
JSON.stringify(id);
TaskOneServices.updateTask(id).then((response) => {
console.log(response)
});
}
export default class TaskListComponent extends Component {
constructor(props) {
super(props)
this.state = {
task_one:[],
}
this.deleteTask = this.deleteTask.bind(this)
// this.updateTask = this.updateTask.bind(this)
}
//------- showing error -------------
componentDidMount() {
TaskOneServices.getTasks().then((response) => {
this.setState({task_one: response.data})
});
}
//------- showing error -------------
deleteTask = (id) => {
JSON.stringify(id);
TaskOneServices.deleteTask(id).then((response) => {
this.refreshPage();
});
}
refreshPage = () => {
window.location.reload();
}
strikeThroughFn(taskid) {
// JSON.stringify(taskString);
console.log(taskid);
var fetchTask = document.getElementById('strikeTask');
fetchTask.innerHTML = <strike> + {taskid} + </strike>
}
render() {
return (
<div className="container-fluid bg-white">
<div className="row">
<table className="table border-bottom table-pad">
<tbody>
{
this.state.task_one.map(
task =>
<tr key = {task.id}>
<td width="60px">
{showImage(task.id)}
</td>
<td id="strikeTask">{task.task}</td>
<td width="60px">
<button type="button" className="close text-danger btn-close-style" onClick={() => this.deleteTask(task.id)}>
<span aria-hidden="true">×</span>
</button>
</td>
</tr>
)
}
</tbody>
</table>
</div>
</div>
)
}
}
我想比较 getStatus 和字符串“CREATED”,如果两者相等,我想 return 内部代码块。但是 getStatus 有一个对象类型,“CREATED”是一个字符串。所以它 return 是错误的。我试过 JSON.stringify() 但它仍然 return 是错误的。有什么方法可以将该对象转换为字符串?
您使用的是 promise,因此 .then() 将在您的函数之后触发,您希望等待 promise 的结果,因此请将 await 关键字与异步函数一起使用。 请记住,异步函数 return 也是一个 promise
async function showImage (taskId) {
var getStatus = (await TaskOneServices.getStatus(taskId))?.data;
JSON.stringify(getStatus);
console.log(typeof(getStatus)); //prints object
console.log(getStatus === "CREATED"); //prints false
if(getStatus === "CREATED") {
return (
<img className="img-lm" src={circle} alt="bullets" onClick={(ev) => {taskCompleted(ev, taskId)}}/>
)
} else {
return (
<img className="img-lm" src={tick} alt="checked" onClick={(ev) => {taskCompleted(ev, taskId)}}/>
)
}
}