我想在提交表单时刷新Table组件。
代码看起来像这样(如果结构不好,告诉我。.React中的新功能;))
我真的不知道如何告诉我的数据提供者 “刷新您的数据,当表单为Submit时再次调用api!
App.JS
const App = () => (
<React.Fragment>
<DataProvider endpoint="api/lead/" render={data => <Table data={data} />} />
<Form endpoint="api/lead/" />
</React.Fragment>
);
数据提供者
class DataProvider extends Component {
static propTypes = {
endpoint: PropTypes.string.isRequired,
render: PropTypes.func.isRequired
};
state = {
data: [],
loaded: false,
placeholder: "Loading..."
};
componentDidMount() {
fetch(this.props.endpoint)
.then(response => {
if (response.status !== 200) {
return this.setState({ placeholder: "Something went wrong" });
}
return response.json();
})
.then(data => this.setState({ data: data, loaded: true }));
}
render() {
const { data, loaded, placeholder } = this.state;
return loaded ? this.props.render(data) : <p>{placeholder}</p>;
}
}
export default DataProvider;
Table.JS
const Table = ({ data }) =>
!data.length ? (
<p>Nothing to show</p>
) : (
<div className="column">
<h2 className="subtitle">
Showing <strong>{data.length} items</strong>
</h2>
<table className="table is-striped">
<thead>
<tr>
{Object.entries(data[0]).map(el => <th key={key(el)}>{el[0]}</th>)}
</tr>
</thead>
<tbody>
{data.map(el => (
<tr key={el.id}>
{Object.entries(el).map(el => <td key={key(el)}>{el[1]}</td>)}
</tr>
))}
</tbody>
</table>
</div>
);
Table.propTypes = {
data: PropTypes.array.isRequired
};
export default Table;
最后是我的表格:
handleSubmit = e => {
e.preventDefault();
const { name, email, message } = this.state;
const lead = { name, email, message };
const conf = {
method: "post",
body: JSON.stringify(lead),
headers: new Headers({ "Content-Type": "application/json" })
};
fetch(this.props.endpoint, conf).then(response => console.log(response));
};
谢谢