>>11609473d/dx^i are vectors spanning the tangent space and dx^i are their duals in the cotangent space, uniquely determined by dx^i(d/dx^i) = 1. It d/dx^i are vectors and dx^i are linear functionals (exactly as you probably learned in linear algebra, it's the very same dual basis).
So df/dx^i is just one of the components of a vector df in the tangent space, such that the dual of this vector has certain proprieties that make it do everything you would like your differential to do. The object you actually want to evaluate becomes sum_i df/dx^i*dx^i which is, in coordinates, the dual of the vector df (aka a function such that, when evaluated on a vector v gives the rate of change in the rate of change in the direction of v). It sounds really confusing, but it works out pretty well both logically and symbolically.