@kamran.davar
سلام . من یه مشکلی با https://ant.design/components/select/#components-select-demo-select-users دارم ممنون میشم راهنماییم کنید
من اون قسمتی که fetch انجام شده میخوام با axios انجامش بدم چون توکن داره صفحاتم و به صورت دیفالت توی هدر axios اون رو قرار دادم. ولی دو تا اشکال داره وقتی axios رو استفاده کردم. یکی اینکه فکر نمیکنم سرچش درست کار بکنه. یکی اینکه وقتی یه چیزی تایپ میکنم اول سلکت باکس رو میبنده و برای اینکه ریزالت رو ببینم باید دوباره روی سلکت باکس کلیک بکنم. ممنون میشم کمکم کنید
این کدیه که axios رو اضافش کردم.
fetchUser = value => {
console.log('fetching user', value);
this.lastFetchId += 1;
const fetchId = this.lastFetchId;
this.setState({ data: [], fetching: true });
axios.get(`${window.REACT_APP_CONFIG.REACT_APP_EMC_URL}api/customers?take=10`).then((response) => {
console.log("customeeeeeeeeeeeeeeers", response)
// if (fetchId !== this.lastFetchId) {
// // for fetch callback order
// return;
// }
const data = response.data.customers.map(user => ({
text: user.familyName,
value: user.code,
}));
this.setState({ data, fetching: false });
})
// fetch(`${window.REACT_APP_CONFIG.REACT_APP_EMC_URL}api/customers?take=10`)
// .then(response => response.json())
// .then(body => {
// console.log("the body", body)
// if (fetchId !== this.lastFetchId) {
// // for fetch callback order
// return;
// }
// // const data = body.data.customers.map(user => ({
// // text: user.familyName,
// // value: user.code,
// // }));
// // this.setState({ data, fetching: false });
// });
};
چون با کد خود antd هم وقتی از axios استفاده میکنم جواب نمیده. آقای داور ممنون میشم کد خود antd رو بگین چجوری با axios باید نوشت
@kamran.davar
import { Select, Spin } from 'antd';
import debounce from 'lodash/debounce';
import React from 'react';
const { Option } = Select;
class Test extends React.Component {
constructor(props) {
super(props);
this.lastFetchId = 0;
this.fetchUser = debounce(this.fetchUser, 800);
}
state = {
data: [],
value: [],
fetching: false,
};
fetchUser = value => {
console.log('fetching user', value);
this.lastFetchId += 1;
const fetchId = this.lastFetchId;
this.setState({ data: [], fetching: true });
fetch('https://randomuser.me/api/?results=5')
.then(response => response.json())
.then(body => {
if (fetchId !== this.lastFetchId) {
// for fetch callback order
return;
}
const data = body.results.map(user => ({
text: `${user.name.first} ${user.name.last}`,
value: user.login.username,
}));
this.setState({ data, fetching: false });
});
};
handleChange = value => {
this.setState({
value,
data: [],
fetching: false,
});
};
render() {
const { fetching, data, value } = this.state;
return (
<Select
mode="multiple"
labelInValue
value={value}
placeholder="Select users"
notFoundContent={fetching ? <Spin size="small" /> : null}
filterOption={false}
onSearch={this.fetchUser}
onChange={this.handleChange}
style={{ width: '100%' }}
>
{data.map(d => (
<Option key={d.value}>{d.text}</Option>
))}
</Select>
);
}
}
export default Test;
@kamran.davar
با axios که مینویسمش همین کد خودشو. ولی باز همون دو تا مشکل رو داره. یک اینکه فکر نمیکنم سرچش کار کنه. دو اینکه همون موقع که سلکت بازه ریزالتو نمیده یه بار خودشو میبنده و بار بعد که سلکت رو باز میکنی ریزالت رو میده در حالی که این حالت با fetch که خودش کد زده اتفاق نمی افته.. ممنون میشم کمک کنید
fetchUser = value => {
console.log('fetching user', value);
this.lastFetchId += 1;
const fetchId = this.lastFetchId;
this.setState({ data: [], fetching: true });
// fetch('https://randomuser.me/api/?results=5')
// .then(response => response.json())
// .then(body => {
// if (fetchId !== this.lastFetchId) {
// // for fetch callback order
// return;
// }
// const data = body.results.map(user => ({
// text: `${user.name.first} ${user.name.last}`,
// value: user.login.username,
// }));
// this.setState({ data, fetching: false });
// });
axios.get('https://randomuser.me/api/?results=5').then((response)=>{
debugger
if (fetchId !== this.lastFetchId) {
// for fetch callback order
return;
}
const data = response.data.results.map(user => ({
text: `${user.name.first} ${user.name.last}`,
value: user.login.username,
}));
this.setState({ data, fetching: false });
})
};
اینکه سرچش کار نمیکنه به دلیل اینه که بک اندش سرچ رو پشیتیبانی نمیکنه
اما مشکل دوم
من همین کد شما رو کپی کردم تو پزوژه خودم و دیدم که تغییر فتچ به اکسیوس هیچ تفاوتی در نتیجه ندارن
هیچ مشکلی نداشتم
وقتی سلکت بازه درخواست که زده میشه لیست جستوجو میره تو حالت لودینگ و بلافاصله بعد از برگشت جواب درخواست لیست از حالت لودینگ خارج میشه و لیت جدید رو نشون میده. بدون نیاز به کلیک. همه چی درست و دقیقه
@kamran.davar
لیست رو میبنده بعد از اتمام جستجو. و بعد باید لیست رو باز کنی تا نتایج رو ببینی. با همین کدهای بالا.
@hesammousavi
@sinashahoveisi
@kamran.davar
سلام. هنوز برای این مشکل راحی پیدا نکردم.. ممنون میشم کمک کنید. این کد دیفالت خود انت دیزاینه که برای اینه که یه چیزی رو سرچ بکنی توی سلکت باکس و بر اساس اون سرچت api رو کال میکنه و ریزالت رو میگیره. ولی وقتی به جای fetch از axios استفاده میکنم بعد از سرچ سلکت رو میبنده و وقتی سلکت رو باز میکنیم مجدد میتونیم نتایج رو ببینیم
import { Select, Spin } from 'antd';
import debounce from 'lodash/debounce';
import React from 'react';
const { Option } = Select;
class Test extends React.Component {
constructor(props) {
super(props);
this.lastFetchId = 0;
this.fetchUser = debounce(this.fetchUser, 800);
}
state = {
data: [],
value: [],
fetching: false,
};
fetchUser = value => {
console.log('fetching user', value);
this.lastFetchId += 1;
const fetchId = this.lastFetchId;
this.setState({ data: [], fetching: true });
fetch('https://randomuser.me/api/?results=5')
.then(response => response.json())
.then(body => {
if (fetchId !== this.lastFetchId) {
// for fetch callback order
return;
}
const data = body.results.map(user => ({
text: `${user.name.first} ${user.name.last}`,
value: user.login.username,
}));
this.setState({ data, fetching: false });
});
};
handleChange = value => {
this.setState({
value,
data: [],
fetching: false,
});
};
render() {
const { fetching, data, value } = this.state;
return (
<Select
mode="multiple"
labelInValue
value={value}
placeholder="Select users"
notFoundContent={fetching ? <Spin size="small" /> : null}
filterOption={false}
onSearch={this.fetchUser}
onChange={this.handleChange}
style={{ width: '100%' }}
>
{data.map(d => (
<Option key={d.value}>{d.text}</Option>
))}
</Select>
);
}
}
export default Test;
عملکردش باید مثل این لینک باشه
لیست رو میبنده بعد از اتمام جستجو. و بعد باید لیست رو باز کنی تا نتایج رو ببینی. با همین کدهای بالا.
من که همین کد های شما رو کپی کردم و اصلا اینطور میگید نبود و همه چی مثل همون لینکه. الانم باز دوباره کپی کردم کد هاتونو و چک کردم باز همه چی درسته.
@kamran.davar دیگه پروژه رو عوض کردم و تست گرفتم درس کار کرد.. واقعا نمیفهمم چی تو پروژه ای که میخوام توش این کد رو بزنم هست که این مشکل بوجود میاد. دقیقا کدها باز مثل بالاس
آره. این کد توی هر خطی که باشه اون خط کد در اولویت اول قرار داره و شما حتی اگر inline css هم بنویسید باز اعمال نمیشه. یعنی میگه هر چی کد سی اس اس هر جای پروژه بود هیچ هیچ اهمیتی نداره فقط همین خط کد رو اعمال کن.
آیا مایل به ارسال نوتیفیکیشن و اخبار از طرف راکت هستید ؟