#reactjs
#реагирует на
Вопрос:
у меня есть API для публикации данных в одном файле JS, и опубликованные данные извлекаются с помощью useEffet
другого файла JS, который я хочу перезагрузить useEffect
после отправки в post
answersubmit.js
clickQuestion = (e) =gt; { var gotid = this.props.match.params.catId; e.preventDefault(); let variableQuestion = this.state.question; this.setState({ arrayForQuestion: variableQuestion }); axios .post('https://ask-over.herokuapp.com/answerpost', { Answers: variableQuestion, correctcount: 0, wrongcount: 0, question_id: gotid, }) .then(() =gt; { // window.location.reload(); }) .catch((error) =gt; { console.log('handlesubmit error for blog ', error); }); }; render() { return ( lt;gt; lt;Answer /gt; // on success post request pass some value saying its post worked lt;/gt; ); }
answer.js
useEffect( () =gt; { axios .get('https://ask-over.herokuapp.com/answersapi/' gotid) .then((result) =gt; { // console.table(result.data); var somevariable = result; setPosts((data) =gt; { return [...data, somevariable]; }); setPosts(result.data); }); }, [ /* get the value here so it reloads dynamicaly */ ] );
Ответ №1:
Вы можете использовать логическое состояние reloadAnswer
для передачи Answer
компоненту в качестве реквизита.
его значение будет переключено, если запрос POST будет выполнен успешно, и вызовет вызов GET в дочернем компоненте.
answersubmit.js:
clickQuestion = (e) =gt; { ... axios .post("https://ask-over.herokuapp.com/answerpost", { ... }) .then(() =gt; { this.setState(prevState =gt; ({ ...prevState, reloadAnswer: !prevState.reloadAnswer }) }) ... }; render() { return ( lt;gt; lt;Answer reloadAnswer={this.state.reloadAnswer} /gt; lt;/gt; )
answer.js:
const Answer = ({ reloadAnswer }) =gt; { useEffect(() =gt; { axios .get("https://ask-over.herokuapp.com/answersapi/" gotid) ... }, [reloadAnswer]); }
Комментарии:
1. мой answer.js является функциональным компонентом крючков, я не знаю, как написать код, который вы предоставили здесь в этом