Запрос API в React - PullRequest
       2

Запрос API в React

0 голосов
/ 17 декабря 2018

Я пытаюсь создать основное веб-приложение .net с реакцией.Однако я борюсь с некоторыми вызовами API и функцией.Это можно было спросить раньше, но я не смог найти решение для себя.

  class Documents extends Component{

constructor(props){
    super(props);
    this.state = {
        docs: []
    };
    this.deleteHandle = this.deleteHandle.bind(this);
}
componentDidMount(){
    const url = 'api/Documents';
    fetch(url)
    .then((response) => {
        return response.json();
    })
    .then((data) =>{
        this.setState({
            docs: data
        });
    })
    .catch((error) => console.log(error));
}
renderDocuments(){
    return this.state.docs.map((doc) => (
        <Doc key={doc.id} doc = {doc}/>
    ));
}
deleteHandle(id) {
    fetch('api/Documents/'+id, { method: 'DELETE' })
        .then((response) => {
            return response.json();
        })
        .catch((error) => console(error));
}
render(){
    return (
        <ul>
            {this.renderDocuments()}
        </ul>
    );
}export default Documents;

А вот мой Doc.js

const Doc = ({ doc }) => (
<li>
    <p>{doc.id} - {doc.documentCode} - {doc.documentName} - {doc.issuedDate}</p>
    <a onClick={this.deleteHandle(doc.id)}>Delete</a>
</li>);export default Doc;

API и Get работает нормально, но когда янажал на кнопку УДАЛИТЬ, он говорит: _this.deleteHandle не является функцией.

Пожалуйста, помогите, большое спасибо.

Ответы [ 3 ]

0 голосов
/ 17 декабря 2018

Doc не имеет свойства, которое называется deleteHandle.Только Documents имеет.Вам нужно передать обработчик на Doc:

const Doc = ({ doc, onDelete }) => (
<li>
    <p>{doc.id} - {doc.documentCode} - {doc.documentName} - {doc.issuedDate}</p>
    <a onClick={onDelete}>Delete</a>
</li>);
export default Doc;

И в Documents.renderDocuments:

return this.state.docs.map((doc) => (
    <Doc key={doc.id} doc = {doc} onDelete={() => this.deleteHandle(doc.id)}/>
));
0 голосов
/ 17 декабря 2018

Вам необходимо передать событие удаления каждому Doc, чтобы его можно было использовать:

renderDocuments(){
    return this.state.docs.map((doc) => (
        <Doc key={doc.id} doc = {doc} onDelete={(id) => this.deleteHandle(id)} />
    ));
}

Затем в Doc:

const Doc = ({ doc, onDelete }) => (
    <li>
        <p>{doc.id} - {doc.documentCode} - {doc.documentName} - {doc.issuedDate}</p>
        <a onClick={onDelete(doc.id)}>Delete</a>
    </li>);
export default Doc;
0 голосов
/ 17 декабря 2018

Ваша проблема в том, что вы вызываете deleteHandle напрямую, вместо того, чтобы передавать функцию, которая вызывает его.С функциями стрелок решение довольно простое:

<a onClick={()=> this.deleteHandle(doc.id)}>Delete</a>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...