راکت

تغییر سلکت باکس انت دیزاین

13 پاسخ

@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 });
        //     });
    };
ثبت پرسش جدید

پاسخ‌ها

13
کامران داور
کامران داور
@kamran.davar

تخصص: Front-end developer

سلام
چرا فک میکنید سرچ درست کار نمیکنه؟
برای مشکل دوم باید کد هاتون رو کامل بزارین

کامران داور
کامران داور
@kamran.davar

تخصص: Front-end developer

با فتچ مشکل دوم رو ندارین؟

شاید پاسخ شما همین‌جا باشد

Parastoo Ebrahimi
Parastoo Ebrahimi
@parastooebrahimi

تخصص: front-end developer

چون با کد خود 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;
Parastoo Ebrahimi
Parastoo Ebrahimi
@parastooebrahimi

تخصص: front-end developer

@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

تخصص: Front-end developer

اینکه سرچش کار نمیکنه به دلیل اینه که بک اندش سرچ رو پشیتیبانی نمیکنه

اما مشکل دوم
من همین کد شما رو کپی کردم تو پزوژه خودم و دیدم که تغییر فتچ به اکسیوس هیچ تفاوتی در نتیجه ندارن
هیچ مشکلی نداشتم
وقتی سلکت بازه درخواست که زده میشه لیست جستوجو میره تو حالت لودینگ و بلافاصله بعد از برگشت جواب درخواست لیست از حالت لودینگ خارج میشه و لیت جدید رو نشون میده. بدون نیاز به کلیک. همه چی درست و دقیقه

کامران داور
کامران داور
@kamran.davar

تخصص: Front-end developer

این تهمت ها چیه به انت عزیز میزنید :))

Parastoo Ebrahimi
Parastoo Ebrahimi
@parastooebrahimi

تخصص: front-end developer

@kamran.davar
لیست رو میبنده بعد از اتمام جستجو. و بعد باید لیست رو باز کنی تا نتایج رو ببینی. با همین کدهای بالا.

Parastoo Ebrahimi
Parastoo Ebrahimi
@parastooebrahimi

تخصص: front-end developer

@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

تخصص: Front-end developer

لیست رو میبنده بعد از اتمام جستجو. و بعد باید لیست رو باز کنی تا نتایج رو ببینی. با همین کدهای بالا.

من که همین کد های شما رو کپی کردم و اصلا اینطور میگید نبود و همه چی مثل همون لینکه. الانم باز دوباره کپی کردم کد هاتونو و چک کردم باز همه چی درسته.

Parastoo Ebrahimi
Parastoo Ebrahimi
@parastooebrahimi

تخصص: front-end developer

@kamran.davar دیگه پروژه رو عوض کردم و تست گرفتم درس کار کرد.. واقعا نمیفهمم چی تو پروژه ای که میخوام توش این کد رو بزنم هست که این مشکل بوجود میاد. دقیقا کدها باز مثل بالاس

کامران داور
کامران داور
@kamran.davar

تخصص: Front-end developer

لعنت بر سی اس اس

احتمالا یکجایی از سی اس اس هاتون از این استفاده شده:

!important
Parastoo Ebrahimi
Parastoo Ebrahimi
@parastooebrahimi

تخصص: front-end developer

@kamran.davar بله استفاده شده. از این میتونه باشه؟

کامران داور
کامران داور
@kamran.davar

تخصص: Front-end developer

آره. این کد توی هر خطی که باشه اون خط کد در اولویت اول قرار داره و شما حتی اگر inline css هم بنویسید باز اعمال نمیشه. یعنی میگه هر چی کد سی اس اس هر جای پروژه بود هیچ هیچ اهمیتی نداره فقط همین خط کد رو اعمال کن.

برای ارسال پاسخ لازم است وارد شده یا ثبت‌نام کنید

ورود یا ثبت‌نام